Конфигурация Swiftmailer: отправка почты с помощью gmail

Я могу отправлять электронную почту со своего компьютера с помощью swiftmailer, но почта не отправляется на сервер.

Я использую swiftmailer 5.0.1. Детали проекта,

  1. Простой проект php в netbeans
  2. быстрый почтовик 5.0.1
  3. ветка 1.13.1

Мой код

public function init() {
        $this->username = '[email protected]'; 
        $this->password = 'password';
        $this->host = 'ssl://smtp.gmail.com';
        $this->port = 465;
        $this->from = '[email protected]';
        $this->subject = 'Company - contact';
        $this->body_part_type = 'text/html';
    }

public function send_email($from_name_add, $to_add, $fullname, $email, $mobile, $content) {
            $this->init();
            $transport = Swift_SmtpTransport::newInstance($this->host, $this->port)
                    ->setUsername($this->username)
                    ->setPassword($this->password);

            $mailer = Swift_Mailer::newInstance($transport);

            $message = Swift_Message::newInstance();
            $cid = $message->embed(Swift_Image::fromPath('../public_html/pic/logo.png'));
            $this->body = $this->renderEmailTemplate('email', $fullname, $email, $mobile, $content, $cid);
            $message->setSubject($this->subject)
                    ->setFrom(array('[email protected]' => '' . $from_name_add))
                    ->setTo($to_add)
                    ->setContentType($this->body_part_type)
                    ->setBody($this->body);
            $result = $mailer->send($message);
            return $result;
        }

Этот код отлично работает на моем компьютере. Но после загрузки этого кода/проекта на сервер почта не отправляется. Ошибка в том,

    <br />
<b>Fatal error</b>:  Uncaught exception 'Swift_TransportException' with message 'Connection could not be established with host ssl://smtp.gmail.com [Connection timed out #110]' in /home/am***/lib/Swift/classes/Swift/Transport/StreamBuffer.php:259
Stack trace:
#0 /home/am***/lib/Swift/classes/Swift/Transport/StreamBuffer.php(64): Swift_Transport_StreamBuffer-&gt;_establishSocketConnection()
#1 /home/am***/lib/Swift/classes/Swift/Transport/AbstractSmtpTransport.php(115): Swift_Transport_StreamBuffer-&gt;initialize(Array)
#2 /home/am***/lib/Swift/classes/Swift/Mailer.php(80): Swift_Transport_AbstractSmtpTransport-&gt;start()
#3 /home/am***/controller/send_mail.php(54): Swift_Mailer-&gt;send(Object(Swift_Message))
#4 /home/am***/public_html/contact.php(43): send_mail-&gt;send_email('Am*** Inc', 'fe****@gma...', 'asdf', '[email protected]', '111111111111', 'Testing mail')
#5 {main}
  thrown in <b>/home/am***/lib/Swift/classes/Swift/Transport/StreamBuffer.php</b> on line <b>259</b><br />

СОВЕТ: На этом сервере уже есть запущенный проект php symfony2, этот проект может успешно отправлять почту.

Вот код symfony2,

$message = \Swift_Message::newInstance()
                ->setSubject($sub)->setFrom($from)->setTo($to)->setContentType("text/html")
                ->setBody($this->renderView('FZAm***Bundle:Layout:mail.html.twig', array
                    ('name' => $this->fullname, 'mobile' => $this->mobile, 'email' => $this->email,
                    'content' => $this->content, 'time' => $this->sys_time, 'ip' => $userip,
                    'server_time' => date('Y-m-d H:i:s'))
        ));
try {
            $this->get('mailer')->send($message);
// catch and other follows. 

Детали конфигурации,

mail_contact_from: [email protected]
  mail_contact_to:   [email protected]
  mail_contact_sub:   Contact info

Я передал только эти данные, и все настройки по умолчанию. Если нужна какая-либо информация, пожалуйста, спросите, я отправлю.

Причина, по которой я перехожу с проекта symfony2 на этот обычный php+swift+twig, заключается в том, что размер моего хостинга составляет всего 100 МБ, и мне нужно загрузить больше изображений. Но symfony2 занимает больше места.


person Sudhakar Krishnan    schedule 08.08.2013    source источник
comment
это может быть полезно: stackoverflow.com/a/46864725/4680523   -  person manish1706    schedule 21.10.2017


Ответы (2)


Похоже, на вашем рабочем сервере отсутствует OpenSSL, поэтому вам необходимо включить его, чтобы обеспечить работу безопасных соединений (т. е. включить модуль php_openssl). Также проверьте этот вопрос.

person Filippos Karapetis    schedule 08.08.2013
comment
Пожалуйста, проверьте вопрос, код symfony2 работает. Работает ли код symfony2 без OpenSSL? Тогда это отправка почты без конфигурации gmail. - person Sudhakar Krishnan; 08.08.2013
comment
Symfony2 построен на PHP. Похоже, у вас проблема с конфигурацией PHP: либо OpenSSL не включен, либо PHP на вашем хосте настроен так, чтобы не взаимодействовать с другими серверами. - person Filippos Karapetis; 08.08.2013

После некоторого поиска в гугле.

Чтобы отправить почту с помощью авторизации gmail, вам нужно использовать этот код,

$transport = Swift_SmtpTransport::newInstance('ssl://smtp.gmail.com', 465);

Это правильный способ отправки почты. Это письмо будет отправлено через gmail.


PHP использует mail() только для отправки почты,

mail($to,$subject,$message,$headers);

Этот код отправляет почту, используя php-код.

Swiftmailer также может отправлять почту, используя эту функцию php mail(),

Вот быстрый код.

$transport = Swift_MailTransport::newInstance();
// nothing inside ()

Проблема с этой почтой в том, что gmail отображает следующее сообщение,

Это сообщение могло быть отправлено не пользователем: [email protected]

Иногда это письмо будет попадать в спам.

person Sudhakar Krishnan    schedule 08.08.2013