Снова:отправка почты (через php) из экземпляра EC2 [закрыто]
-
13-12-2019 - |
Вопрос
Я видел много обсуждений проблемы отправки почты с экземпляра Amazon EC2 с использованием функции mail в php.Ни одно из предложений у меня не сработало.
Вот моя настройка:
- У меня есть экземпляр ubuntu EC2.
- Я последовал инструкциям в SES Amazon, чтобы установить postfix, используя учетные данные, которые были созданы для меня.Я испробовал как ошеломляющий, так и прямой методы.
- Я использовал swiftmail transport для отправки своей почты в соответствии с этот.Транспортная функция для отправки письма возвращает значение 0 доставлено.
- Я использовал php mail сам по себе, и он возвращает true.Однако почта не доставляется даже в виде спама.
Кстати, я не использую производственный сервис с SES.Меня устраивают ограничения, я просто хочу, чтобы это сработало.
Я подозреваю, что меня неправильно аутентифицируют, и я не понимаю почему.Я попытался подключиться по telnet...amazonaws.com 25 и он подключается.Но когда я попробовал командную почту из:...в telnet указано, что требуется аутентификация.
Я уже придумал альтернативу:отправь сетку.Слишком дорого для моего использования.
Есть какие-нибудь мысли?
Решение
Вот как я использовал Sendgrid для отправки почты из экземпляра EC2 с использованием PHP:
- Зарегистрируйте учетную запись Sendgrid.Вы получите имя пользователя и пароль, которые будете использовать для отправки электронных писем.Кроме того, Sendgrid вручную верифицирует вашу учетную запись (возможно, для предотвращения рассылки спама).
- Установите библиотеку PHP curl в ubuntu:
sudo apt-get install php5-curl
. Используйте этот PHP-код для отправки электронной почты:
$url = 'http://sendgrid.com/'; $user = 'sendgrid_user'; $pass = 'sendgrid_password'; $params = array( 'api_user' => $user, 'api_key' => $pass, 'to' => $dest_addr, 'subject' => $subject, 'html' => $body, //'text' => 'testing body', 'from' => $from_addr, ); $request = $url.'api/mail.send.json'; $session = curl_init($request); // Tell curl to use HTTP POST curl_setopt ($session, CURLOPT_POST, true); // Tell curl that this is the body of the POST curl_setopt ($session, CURLOPT_POSTFIELDS, $params); // Tell curl not to return headers, but do return the response curl_setopt($session, CURLOPT_HEADER, false); curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // obtain response $response = curl_exec($session); //If the result is {"message":"success"}, then the mail is sent. curl_close($session);
Другие советы
Одной из альтернатив postfix является использование "простого smtp". (ssmtp), который обеспечит рабочий отправить почту которые могут использовать другие программы/фреймворки.В этом примере ssmtp будет отправлять электронные письма через учетную запись gmail.
- Сначала откройте учетную запись gmail, если у вас ее еще нет
- убедитесь, что вы абсолютно НЕТ у вас уже установлено параллельное почтовое приложение, такое как xmail или postfix, иначе оно будет мешать
- затем установите ssmtp :
sudo apt-get install ssmtp
- затем отредактируйте
/etc/ssmtp/ssmtp.conf
(смотрите ниже) - затем отредактируйте
/etc/ssmtp/revaliases
(смотрите ниже) - затем протестируйте :
echo message content | sendmail -v test@something.com
- (необязательно) просмотрите журнал, если он не работает :
ll /var/log/mail.*
иcat ...
Содержание ssmtp.conf должно быть :(взято из моего кукольного модуля, замените <%= %> разделы с вашими данными)
root=<%= email %>
mailhub=smtp.googlemail.com:465
AuthUser=<%= email %>
AuthPass=<%= password %>
FromLineOverride=YES
UseTLS=YES
Предупреждение :файл conf должен содержать unix eols.
И содержание переоценки должно быть :
root:<%= email %>:smtp.googlemail.com:465
Этот метод чрезвычайно прост, но я думаю, что он не будет масштабироваться, если вам нужно отправить сотни электронных писем.
Еще одна отличная ссылка (на французском) : http://doc.ubuntu-fr.org/ssmtp