как исправить способ отправки письма с использованием codeigniter - PullRequest
7 голосов
/ 01 июня 2011

Эй, парень, я пытаюсь отправить электронную почту с помощью функции класса codeiginiter mail, но обнаружил проблему с протоколом smtp.Я использовал протокол Gmail SMTP.Я запускаю это в локальной машине.Я использую пакет Xampp 1.7.4, и я попытался установить, как показано ниже:

function index()
{

    $config['protocol'] = 'smtp'; // mail, sendmail, or smtp    The mail sending protocol.
    $config['smtp_host'] = 'smtp.gmail.com'; // SMTP Server Address.
    $config['smtp_user'] = 'me@gmail.com'; // SMTP Username.
    $config['smtp_pass'] = '123'; // SMTP Password.
    $config['smtp_port'] = '25'; // SMTP Port.
    $config['smtp_timeout'] = '5'; // SMTP Timeout (in seconds).
    $config['wordwrap'] = TRUE; // TRUE or FALSE (boolean)    Enable word-wrap.
    $config['wrapchars'] = 76; // Character count to wrap at.
    $config['mailtype'] = 'html'; // text or html Type of mail. If you send HTML email you must send it as a complete web page. Make sure you don't have any relative links or relative image paths otherwise they will not work.
    $config['charset'] = 'utf-8'; // Character set (utf-8, iso-8859-1, etc.).
    $config['validate'] = FALSE; // TRUE or FALSE (boolean)    Whether to validate the email address.
    $config['priority'] = 3; // 1, 2, 3, 4, 5    Email Priority. 1 = highest. 5 = lowest. 3 = normal.
    $config['crlf'] = "\r\n"; // "\r\n" or "\n" or "\r" Newline character. (Use "\r\n" to comply with RFC 822).
    $config['newline'] = "\r\n"; // "\r\n" or "\n" or "\r"    Newline character. (Use "\r\n" to comply with RFC 822).
    $config['bcc_batch_mode'] = FALSE; // TRUE or FALSE (boolean)    Enable BCC Batch Mode.
    $config['bcc_batch_size'] = 200; // Number of emails in each BCC batch.

    $this->load->library('email');
    $this->email->initialize($config);


    $this->email->from('me@gmail.com', 'Me');
    $this->email->reply_to('me@gmail.com', 'Me');
    $this->email->to('you@yahoo.com');
    $this->email->subject('testing my mail function with CodeIgniter');
    $this->email->message('<html><body>this is the content</body></html>');

    if ( ! $this->email->send()){
        echo 'error! <br />';
        // Generate error
    }
    echo $this->email->print_debugger();

}

и ниже ошибка была показана в моем браузере:

error!
220 mx.google.com ESMTP b8sm581192pbj.46

hello: 250-mx.google.com at your service, [118.96.231.25]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES

Failed to send AUTH LOGIN command. Error: 530 5.7.0 Must issue a STARTTLS command first. b8sm581192pbj.46

from: 530 5.7.0 Must issue a STARTTLS command first. b8sm581192pbj.46

The following SMTP error was encountered: 530 5.7.0 Must issue a STARTTLS command first. b8sm581192pbj.46

to: 530 5.7.0 Must issue a STARTTLS command first. b8sm581192pbj.46

The following SMTP error was encountered: 530 5.7.0 Must issue a STARTTLS command first. b8sm581192pbj.46

data: 530 5.7.0 Must issue a STARTTLS command first. b8sm581192pbj.46

The following SMTP error was encountered: 530 5.7.0 Must issue a STARTTLS command first. b8sm581192pbj.46
502 5.5.1 Unrecognized command. b8sm581192pbj.46
The following SMTP error was encountered: 502 5.5.1 Unrecognized command. b8sm581192pbj.46
Unable to send email using PHP SMTP. Your server might not be configured to send mail using this method.

User-Agent: CodeIgniter
Date: Wed, 1 Jun 2011 09:27:21 +0700
From: "Me" 
Return-Path: 
Reply-To: "Me" 
To: you@yahoo.com
Subject: =?utf-8?Q?testing_my_mail_function_with_CodeIgniter?=
X-Sender: me@gmail.com
X-Mailer: CodeIgniter
X-Priority: 3 (Normal)
Message-ID: <4de5a38938720@gmail.com>
Mime-Version: 1.0


Content-Type: multipart/alternative; boundary="B_ALT_4de5a38938733"

This is a multi-part message in MIME format.
Your email application may not support this format.

--B_ALT_4de5a38938733
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

this is the content


--B_ALT_4de5a38938733
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html><body>this is the content</body></html>

--B_ALT_4de5a38938733--

Ответы [ 5 ]

9 голосов
/ 01 июня 2011

В целях безопасности почтовые серверы Google требуют SSL или TLS для отправки почты.Он не использует стандартный метод незашифрованного порта 25.

У вас есть два варианта.1) Используйте sendmail или почту на вашем собственном сервере для доставки сообщений, или 2) используйте метод , описанный здесь , для отправки электронной почты через серверы Google с использованием SSL.Удачи, и я надеюсь, это поможет.

3 голосов
/ 12 октября 2012

Вы даже можете использовать порт 587:

$config['smtp_port'] = '587';

и smtp-host как:

$config['smtp_host'] = 'ssl://smtp.gmail.com';
3 голосов
/ 01 июня 2011

Вы пытаетесь отправить исходящую почту через Gmail через стандартный SMTP-порт 25. Gmail не принимает незашифрованные соединения через этот порт (или любой порт). Вы должны использовать порт 465 через SSL.

Вы должны изменить $config['smtp_port'] на 465 и $config['smtp_host'] на 'ssl://smtp.googlemail.com'

Подробнее здесь

1 голос
/ 28 сентября 2016

Я решил эту проблему, включив префикс ssl в smtp_host, оставив его таким образом:

$config['smtp_host'] = 'ssl://smtp.gmail.com';

И обязательно используйте порт 465 (это порт smtp от Google):

$config['smtp_port'] = '465';

В противном случае по умолчанию Google блокирует «соединения с низким уровнем безопасности», поэтому вы можете войти в свою учетную запись Google и настроить эту опцию.

Разрешить менее защищенным приложениям доступ к учетным записям

Активируйте эту опцию и повторите попытку. Надеюсь, это поможет вам!

0 голосов
/ 04 июня 2013

1) Ваш порт smtp должен быть 465.

2) Ваш SMTP-хост должен быть ssl://smtp.gmail.com.

$config['smtp_host'] = 'ssl://smtp.gmail.com'; // SMTP Server Address.

$config['smtp_port'] = '465'; // SMTP Port.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...