2009-10-12 6 views
62
<?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'); 
    } 
} 

Я получаю эту ошибку:Отправка электронной почты с GMAIL SMTP с CodeIgniter электронной библиотеки

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, но я не смог).

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

+0

'$ конфиг [ 'проверка'] = TRUE, является неправильным, ключ индекса ** Validate **, так что используйте' $ конфиг [» validate '] = TRUE' – Delmo

ответ

102
$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 Forums

+9

+1, Обратите внимание, что все элементы массива заключены в одинарные кавычки, и только параметры '$ this-> email-> set_newline' заключены в двойные кавычки. это очень важно, иначе это не сработает. –

+10

, потому что в PHP (и нескольких других языках) '\ n' означает только новую строку, если она находится в двойных кавычках. В одинарных кавычках это означает буквальные символы \ n. – DMin

+1

Решение было, thnx: для $ this-> email-> set_newline ("\ r \ n") – TooCooL

18

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

;extension=php_openssl.dll

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

(путем удаления с запятой из заявления)

extension=php_openssl.dll

+1

Это только для Windows Servers. Используйте phpinfo(), чтобы узнать, есть ли у вас соответствующие сокеты, и если openssl находится на вашем сервере. – jjwdesign

4

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

Другой вариант я работаю, в 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)

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

13

Согласно CI Docs (CodeIgniter Email Library) ...

If you prefer not to set preferences using the above method, you can instead put them into a config file. Simply create a new file called the email.php, add the $config array in that file. Then save the file at config/email.php and it will be used automatically. You will NOT need to use the $this->email->initialize() function if you save your preferences in a config file.

Я был в состоянии получить эту работу, поставив все настройки в приложения/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(); 

Кроме того, как писал Церебро, я должен был раскомментировать эту строку в моем PHP.INI-файл и перезапустить PHP:

extension=php_openssl.dll 
+0

вы предоставите мне код библиотеки электронной почты, каждый раз, когда я видел $ this-> load-> library ('email'), но у меня нет электронной почты libraery, что я могу сделать? пожалуйста, сэр, дайте мне способ, которым я новичок в CI и кодировании. спасибо вам :) –

7

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

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

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

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

+0

Работаю для меня тоже ... –

+0

Не работаю для меня без $ config ['crlf'] = "\ r \ n"; $ config ['newline'] = "\ r \ n"; – BoCyrill

Смежные вопросы