como corrigir a maneira de enviar email usando o codeigniter

Ei cara, estou tentando enviar e-mails usando a function de class de correio do codeiginiter, mas encontrei um problema com o protocolo smtp. Eu uso o protocolo Gmail smtp. Estou executando isso na máquina local. Estou usando o pacote Xampp 1.7.4, e tentei configurar como abaixo:

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('this is the content'); if ( ! $this->email->send()){ echo 'error! 
'; // Generate error } echo $this->email->print_debugger(); }

e abaixo o erro foi mostrado no meu navegador:

 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:  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 this is the content --B_ALT_4de5a38938733-- 

Por razões de segurança, os servidores de e-mail do Google exigem SSL ou TLS para enviar o correio. Não usa o método padrão de 25 portas não criptografadas para fazê-lo.

Você basicamente tem duas opções. 1) Use o sendmail ou o correio no seu próprio servidor para enviar as mensagens, ou 2) use o método descrito aqui para enviar e-mail através dos servidores do Google usando o SSL. Boa sorte, e espero que isso ajude.

Você está tentando enviar e-mails via Gmail na porta SMTP padrão 25. O Gmail não aceita conexões não criptografadas nessa porta (ou qualquer porta). Você deve usar a porta 465 sobre SSL.

Você deve alterar seu $config['smtp_port'] para 465 e seu $config['smtp_host'] para 'ssl://smtp.googlemail.com'

Mais informações aqui

Você pode até mesmo usar a porta 587:

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

e smtp-host como:

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

Eu resolvi esse problema ao include o prefixo ssl no smtp_host deixando assim:

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

E certifique-se de usar a porta 465 (essa é a porta smtp do google):

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

Caso contrário, por padrão, o google bloqueia as “conecções de baixa segurança”, para que você possa entrar na sua conta do google e configurar esta opção.

Permitir aplicativos menos seguros para acessar as contas

Ative esta opção e tente novamente. Espero que isso possa ajudá-lo !.

1) Você smtp porta deve ser 465 .

2) Você smtp host deve ser ssl://smtp.gmail.com .

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