Отправка электронной почты с помощью gmail smtp с библиотекой электронной почты codeigniter

<?php
class Email extends Controller {

    function Email()
    {
        parent::Controller();   
        $this->load->library('email');
    }

    function index()
    {
        $config['protocol']    = 'smtp';
        $config['smtp_host']    = 'ssl://smtp.gmail.com';
        $config['smtp_port']    = '465';
        $config['smtp_timeout'] = '7';
        $config['smtp_user']    = '[email protected]';
        $config['smtp_pass']    = '*******';
        $config['charset']    = 'utf-8';
        $config['newline']    = "\r\n";
        $config['mailtype'] = 'text'; // or html
        $config['validation'] = TRUE; // bool whether to validate email or not      

        $this->email->initialize($config);

        $this->email->from('[email protected]', 'myname');
        $this->email->to('[email protected]'); 

        $this->email->subject('Email Test');
        $this->email->message('Testing the email class.');  

        $this->email->send();

        echo $this->email->print_debugger();

        $this->load->view('email_view');
    }
}

Я получаю эту ошибку:

A PHP Error was encountered
Severity: Warning
Message: fsockopen() [function.fsockopen]: unable to connect to ssl://smtp.gmail.com:465 (Connection timed out)
Filename: libraries/Email.php
Line Number: 1641

Использование PORT 25/587

Я получил эту ошибку:

A PHP Error was encountered
Severity: Warning
Message: fsockopen() [function.fsockopen]: SSL operation failed with code 1. OpenSSL Error messages: error:140770FC:SSL routines:func(119):reason(252)
Filename: libraries/Email.php
Line Number: 1641

Я не хочу использовать phpmailer сейчас. (На самом деле я пытался использовать phpmailer, но мне это не удалось).

Как решить эту проблему ребята?


person Shiv    schedule 12.10.2009    source источник
comment
$config['validation'] = TRUE неверно, ключ индекса валидирован, поэтому используйте $config['validate'] = TRUE   -  person Delmo    schedule 15.10.2014


Ответы (9)


$config = Array(
    'protocol' => 'smtp',
    'smtp_host' => 'ssl://smtp.googlemail.com',
    'smtp_port' => 465,
    'smtp_user' => 'xxx',
    'smtp_pass' => 'xxx',
    'mailtype'  => 'html', 
    'charset'   => 'iso-8859-1'
);
$this->load->library('email', $config);
$this->email->set_newline("\r\n");

// Set to, from, message, etc.

$result = $this->email->send();

Из форумов CodeIgniter

person Teej    schedule 26.10.2009
comment
+1, обратите внимание, что все элементы массива заключены в одинарные кавычки, а только параметры $this->email->set_newline заключены в двойные кавычки. это очень важно, иначе это не работает. - person Naveen Kumar; 02.05.2012
comment
это потому, что в PHP (и некоторых других языках) \n означает новую строку только в том случае, если она заключена в двойные кавычки. В одинарных кавычках это означает буквальные символы \n. - person DMin; 04.08.2012
comment
Решение было, спс: для $this-›email-›set_newline(\r\n) - person TooCooL; 09.12.2015
comment
@NaveenKumar до сих пор не может отправить электронное письмо. не получил никакого ответа в $result = $this->email->send(); - person Pathik Vejani; 30.03.2016
comment
@ThorpeObazee Сэр, можем ли мы добавить еще немного конфигурации в файл конфигурации почты. например, $config['subjectEnquiry'] => электронная почта для запросов; или $config['subjectSuccess'] =› данные успешно добавлены; - person ankit suthar; 30.03.2017
comment
Я нашел статью, в которой описывается, как отправлять электронные письма в приложении CodeIgniter с использованием SMTP и с использованием хорошо известного и поддерживаемого класса отправки электронной почты. cloudways.com/blog/send-email-codeigniter-smtp - person Owais Alam; 23.08.2017
comment
Я нашел статью, в которой показано, как отправлять электронные письма в приложении CodeIgniter с использованием SMTP. cloudways.com/blog/send-email-codeigniter-smtp - person Owais Alam; 23.08.2017
comment
пожалуйста, кто-нибудь скажите мне, в библиотеке электронной почты, какой код я должен использовать. у меня нет библиотеки электронной почты, как я могу получить библиотеку электронной почты. я новичок в КИ - person prakash pokhrel; 16.01.2018
comment
я использовал тот же код ... но в моем почтовом ящике ... получил электронное письмо о том, что попытка входа в систему была заблокирована, какие еще настройки необходимы? мой IMAP уже включен - person Manjiri Parab; 02.12.2018
comment
Важным моментом является использование строки $CI->email->set_newline("\r\n");. В остальном нет проблем с объявлением и инициализацией массива $config. Очевидно, мы должны включить extension=php_openssl.dll - person int soumen; 21.12.2018
comment
Использование вышеуказанного работает, но если я изменю 'charset' =› 'utf-8', сообщение не будет доставлено. Я использую CodeIgniter 3.1.9, размещенный на GoDaddy. Я читал, что Gmail все равно меняет все сообщения на utf-8. Любая идея, почему «utf-8» не будет доставлен? - person Genki; 09.10.2019

Вам нужно включить SSL в вашей конфигурации PHP. Загрузите php.ini и найдите строку со следующим:

;extension=php_openssl.dll

Раскомментируйте его. :D

(удалив точку с запятой из оператора)

extension=php_openssl.dll

person Cerebro    schedule 07.04.2010
comment
Это только для серверов Windows. Используйте phpinfo(), чтобы узнать, есть ли у вас подходящие сокеты и есть ли на вашем сервере openssl. - person jjwdesign; 25.10.2011

Согласно документам CI (Библиотека электронной почты CodeIgniter)...

Если вы предпочитаете не устанавливать настройки с помощью вышеуказанного метода, вы можете вместо этого поместить их в файл конфигурации. Просто создайте новый файл с именем email.php, добавьте в него массив $config. Затем сохраните файл в config/email.php, и он будет использоваться автоматически. Вам НЕ нужно будет использовать функцию $this->email->initialize(), если вы сохраните свои настройки в файле конфигурации.

Я смог заставить это работать, поместив все настройки в application/config/email.php.

$config['useragent'] = 'CodeIgniter';
$config['protocol'] = 'smtp';
//$config['mailpath'] = '/usr/sbin/sendmail';
$config['smtp_host'] = 'ssl://smtp.googlemail.com';
$config['smtp_user'] = '[email protected]';
$config['smtp_pass'] = 'YOURPASSWORDHERE';
$config['smtp_port'] = 465; 
$config['smtp_timeout'] = 5;
$config['wordwrap'] = TRUE;
$config['wrapchars'] = 76;
$config['mailtype'] = 'html';
$config['charset'] = 'utf-8';
$config['validate'] = FALSE;
$config['priority'] = 3;
$config['crlf'] = "\r\n";
$config['newline'] = "\r\n";
$config['bcc_batch_mode'] = FALSE;
$config['bcc_batch_size'] = 200;

Затем в одном из методов контроллера у меня есть что-то вроде:

$this->load->library('email'); // Note: no $config param needed
$this->email->from('[email protected]', '[email protected]');
$this->email->to('[email protected]');
$this->email->subject('Test email from CI and Gmail');
$this->email->message('This is a test.');
$this->email->send();

Также, как писал Cerebro, мне пришлось раскомментировать эту строку в моем файле php.ini и перезапустить PHP:

extension=php_openssl.dll
person Luke    schedule 28.05.2013
comment
не могли бы вы предоставить мне код библиотеки электронной почты каждый раз, когда я видел $this-›load-›library('email'), но у меня нет библиотеки электронной почты, что я могу сделать?? пожалуйста, сэр, дайте мне способ, я новичок в CI и кодировании. Спасибо вам :) - person prakash pokhrel; 16.01.2018

Измените его на следующее:

$ci = get_instance();
$ci->load->library('email');
$config['protocol'] = "smtp";
$config['smtp_host'] = "ssl://smtp.gmail.com";
$config['smtp_port'] = "465";
$config['smtp_user'] = "[email protected]"; 
$config['smtp_pass'] = "yourpassword";
$config['charset'] = "utf-8";
$config['mailtype'] = "html";
$config['newline'] = "\r\n";

$ci->email->initialize($config);

$ci->email->from('[email protected]', 'Blabla');
$list = array('[email protected]');
$ci->email->to($list);
$this->email->reply_to('[email protected]', 'Explendid Videos');
$ci->email->subject('This is an email test');
$ci->email->message('It is working. Great!');
$ci->email->send();
person RobinCominotto    schedule 23.01.2014

отправить html письмо через codeiginater

    $this->load->library('email');
    $this->load->library('parser');



    $this->email->clear();
    $config['mailtype'] = "html";
    $this->email->initialize($config);
    $this->email->set_newline("\r\n");
    $this->email->from('[email protected]', 'Website');
    $list = array('[email protected]', '[email protected]');
    $this->email->to($list);
    $data = array();
    $htmlMessage = $this->parser->parse('messages/email', $data, true);
    $this->email->subject('This is an email test');
    $this->email->message($htmlMessage);



    if ($this->email->send()) {
        echo 'Your email was sent, thanks chamil.';
    } else {
        show_error($this->email->print_debugger());
    }
person Chamil Sanjeewa    schedule 23.02.2011

Другой вариант, который у меня есть, работает на Linux-сервере с Postfix:

Сначала настройте электронную почту CI для использования системы электронной почты вашего сервера: например, в email.php, например

# alias to postfix in a typical Postfix server
$config['protocol'] = 'sendmail'; 
$config['mailpath'] = '/usr/sbin/sendmail'; 

Затем настройте свой постфикс для ретрансляции почты в Google (возможно, в зависимости от адреса отправителя). Возможно, вам потребуется указать параметры пароля пользователя в /etc/postfix/sasl_passwd (docs).

Это намного проще (и менее фрагментарно), если у вас есть Linux-система, уже настроенная на отправку некоторых/всех исходящих писем в Google.

person leonbloy    schedule 02.05.2011

Возможно, ваш хостинг-сервер и сервер электронной почты расположены в одном месте, и вам не нужно проходить smtp-аутентификацию. Просто оставьте все по умолчанию, например:

$config = array(        
    'protocol' => '',
    'smtp_host' => '',
    'smtp_port' => '',
    'smtp_user' => '[email protected]',
    'smtp_pass' => '**********'
    );

or

$config['protocol'] = '';
$config['smtp_host'] = '';
$config['smtp_port'] = ;
$config['smtp_user'] = '[email protected]';
$config['smtp_pass'] = 'password';

меня устраивает.

person Shiplu    schedule 07.05.2015
comment
У меня не работает без $config['crlf'] = \r\n; $config['новая строка'] = \r\n; - person BoCyrill; 24.08.2016

Это может быть:

Если вы используете cpanel для своего веб-сайта, ограничения smtp являются проблемой и вызывают эту ошибку. Ограничения SMTP

Ошибка при отправке электронного письма с помощью CodeIgniter

person Adrian P.    schedule 21.07.2016

На это есть очень простой ответ. и единственное решение, которое работало в en, было этой конфигурацией. Мне нужно было только изменить порт на 587 и перезаписать код по умолчанию Email.php

$config = array( 'protocol' => 'smtp', 'smtp_host' => 'smtp.gmail.com', 'smtp_port' => 587, 'smtp_user' => '[email protected]', 'smtp_pass' => '1800@Footscray123!' );$this->load->library('email', $config);$this->email->initialize($config);
person Aditya    schedule 03.04.2021