Отправка электронной почты с 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'] = "rn";
$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, но мне не удалось).



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

724   8  

8 ответов:

$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

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

;extension=php_openssl.dll

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

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

extension=php_openssl.dll

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

Если вы предпочитаете не устанавливать предпочтения с помощью вышеуказанного метода, вы можете вместо этого поместите их в конфигурационный файл. Просто создайте новый файл под названием электронная почта.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

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

$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();

отправить 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());
    }

еще один вариант у меня работает, на сервере linux с постфиксом:

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

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

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

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

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

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

или

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

это работает для меня.

можно так:

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

ошибка при отправке сообщения электронной почты с CodeIgniter

Comments

    Ничего не найдено.