Я пытаюсь отправить сообщение электронной почты с помощью CakePhp 2.0. в моем контроллере я использую этот код (я знаю, что все в порядке, я взял его из поваренной книги ):
App::uses('CakeEmail', 'Network/Email'); $email = new CakeEmail("myConfig"); $email->from(array('from@example.com' => 'From Example')); $email->to($to); $email->subject($msgtitle); $ok = $email->send($content);
и в app/config/email.php
меня есть эта конфигурация:
<?php class EmailConfig { public $myConfig = array( 'host' => 'mail.myServer.com', 'port' => 587, 'username' => 'mYaccount', 'password' => 'secret', 'transport' => 'Smtp' ); } ?>
проблема заключается в том, что сервер отвечает:
SMTP Error: 530 5.7.0 Must issue a STARTTLS command first.
имя учетной записи верное, как и пароль. Конфигурация работает при загрузке в thunderbird, подключение к серверу smtp настраивается как:
имя сервера: mail.myServer.com
порт: 587
безопасность соединения: STARTTLS
аутентификация: обычный пароль
имя пользователя: mYaccount
Вы уверены, что ваш SMTP поддерживает tls? Попробуйте отправить команду ehlo:
telnet 1.2.3.4 25 ehlo testing
Вы должны увидеть что-то вроде:
250-STARTTLS
в списке.
Если вы это видите, то, скорее всего, он не включен. Вам нужно будет включить его. Если вы этого не видите, вам нужно будет добавить его.
Ниже код работает для меня через сервер GoDaddy с помощью электронной почты CakePHP SMTP:
Файл электронной почты.php внутри папки config – CakePHP 2.4 Версия MVC:
// for Live Server GoDaddy.com domain public $smtp = array( 'transport' => 'Smtp', 'host' => 'ssl://smtpout.asia.secureserver.net', <-- important 'port' => 465, <-- important #'timeout' => 30, 'username' => 'no-reply@godaddy-domain.com', 'password' => 'password', #'tls' => false, #'log' => false, 'charset' => 'utf-8', 'headerCharset' => 'utf-8', );
И вот код файла контроллера ниже:
// Controller Code to Send Actual Email // email configuration $Email = new CakeEmail('smtp'); $Email->from(array('no-reply@godaddy-domain.com' => 'App Name')) ->sender('no-reply@godaddy-domain.com', 'App Name') ->to(array($email)) ->bcc(array('xyz@xyz.com')) ->subject('Test Email from GoDaddy') ->emailFormat('both') ->send($hash.'<br><strong>My</strong> message 45 قبل الميلاد، مما يجعله أكثر من');
Надеюсь, поможет !
благодаря
Из Cookbook CakePHP:
Вы можете настроить SSL SMTP-серверы, например, GMail. Для этого поставьте «ssl: //» в префикс в хосте и соответствующим образом настройте значение порта. Пример:
class EmailConfig { public $gmail = array( 'host' => 'ssl://smtp.gmail.com', (...)
Попробуйте следующее:
<?php class EmailConfig { public $myConfig = array( 'host' => 'ssl://mail.myServer.com', 'port' => 465, 'username' => 'mYaccount', 'password' => 'secret', 'transport' => 'Smtp' ); } ?>
Убедитесь, что
php_openssl.dll
расширение работает.
Вы можете проверить его в файле php.ini
.
Если вы используете XAMPP, php.ini должен находиться на C:\xampp\php
php.ini: ;extension=php_oci8.dll ; Use with Oracle 10gR2 Instant Client ;extension=php_oci8_11g.dll ; Use with Oracle 11gR2 Instant Client extension=php_openssl.dll ;extension=php_pdo_firebird.dll
public $smtp = array( ................., 'tls' => true );