Welcome Guest, Not a member yet? Register   Sign In
Gmail SMTP using SSL/TLS
#1

[eluser]wrs[/eluser]
This post is no longer accurate for use with CodeIgniter2, thankfully biojazard has revised the code in his post later in this thread. I'd link you to it, but im apparently being punished for not being 'active'.

To help lift any bad feelings towards my absence Id like to use several smileys to seperate this edit with the original post.

:wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow:

I only heard about codeigniter a couple days ago so forgive me if im repeating something found either on the forums or bugtracker etc.

I've been trying to use the included Email library in conjunction with my favourite Google Mail service and, like many others, i've been having many problems.

Google Mail requires encryption ( SSL/TLS ) for its SMTP access and it has been noted that this is not something that CodeIgniter currently supports. Understanding this I decided to go about either modifying or rewriting the CI_Email class to include these features.

After some reading it seems that SSL and TLS are in fact the same thing ( the protocol was renamed? ). I think its fair to say the most common misunderstanding of these two protocols are that SSL is encryption enabled during connection and that TLS is encryption enabled on the fly after a connection has been made ( hence the STARTTLS ESMTP command ).

In any case, after several hours of farting about, i've realised that CodeIgnighter will indeed work with the Gmail service without any modification of the core classes.

Firstly, your PHP installation must include support for openssl ( either compiled in, or with the php_openssl.dll extension loaded ). You will want to read the pages surrounding OpenSSL Installation within the PHP Manual.

With that done, you just need your standard use of the email library with a few noticable changes from the norm:

Code:
$config = Array(
    'protocol' => 'smtp',
    'smtp_host' => 'ssl://smtp.googlemail.com',
    'smtp_port' => 465,
    'smtp_user' => '[email protected]',
    'smtp_pass' => 'your_password',
);
$this->load->library('email', $config);
$this->email->set_newline("\r\n");

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

$this->email->subject(' CodeIgniter Rocks Socks ');
$this->email->message('Hello World');


if (!$this->email->send())
    show_error($this->email->print_debugger());
else
    echo 'Your e-mail has been sent!';

The important parts of the above code are the inclusion of the ssl:// protocol before the smtp hostname, and setting the newline variable to CRLF. The port value of 465 may also be important ( 25 doesnt work at least).

Everything is now working as expected here, hope this helps someone.

Also, I noticed that the documentation recommends using $this->email->initialize($config_array) for setting your mailing preferences however it does not take the nesecarry steps to enable authentication should smtp_user & smtp_pass be defined. The good news is that you can pass the exact same $config_array to your $this->load->library(); call like so:
Code:
$this->load->library('email', $config_array);

This will do exactly the same as initialize($config_array) but will properly configure for authentication should be it required. Perhaps there is a reason for initalize()'s behaviour but the documentation is misleading and doesnt mention $this->load->library('email', $config_array); at all.


I havnt decided if I will use CodeIgnigter as part of my usual dev toolset, its certainly an interesting framework, but i've been impressed with both it and its community so far. So keep up the good work ;D
#2

[eluser]sophistry[/eluser]
superb first post!

thanks for your hard work and feedback, wrs.

the bug with with email class is noted here.

since you are sending email you might be interested in an imap_pop class i wrote... imap_pop class on the wiki

cheers. here's hoping you stick around! :-)
#3

[eluser]Peri[/eluser]
wrs, i did it, but didn't work.
Following the error of $this->email->print_debugger():

"The following SMTP error was encountered: 530-5.5.1 Authentication Required. Learn more at 530 5.5.1 http://mail.google.com/support/bin/answe...swer=14257 6sm2484862yxg.6"

Could you help me?

Tks
#4

[eluser]wrs[/eluser]
Peri,

I rechecked the code I posted, all is working fine here. You told us the error message you received, but not what you did to receive it...

But i'm guessing you've fallen victim to the $this->email->initialize() bug I described above where, even if smtp_user and smtp_pass are set, SMTP authentication is not used.

If you are using the following code:
Code:
$this->load->library('email');
$this->email->initialize($config_array);

then consider changing it to:

Code:
$this->load->library('email', $config_array);
#5

[eluser]Jérôme Jaglale[/eluser]
Good job wrs, thank you for sharing it. It works perfectly.
#6

[eluser]onblur[/eluser]
Thanks for this post. Working great.

I found that all I needed to do was to put the settings into the email.php config file (system/config/email.php), and use $this->email->set_newline("\r\n").

Code:
$config['protocol'] = 'smtp';
$config['smtp_host'] = 'ssl://smtp.googlemail.com';
$config['smtp_user'] = '[email protected]';
$config['smtp_pass'] = '123xyz';
$config['smtp_port'] = '465';
#7

[eluser]phpoet[/eluser]
Excellent! I was just wondering about this myself and here is the answer. Great post!
#8

[eluser]warpman[/eluser]
Thanks for sharing this information. Great, helpful post!
#9

[eluser]ecigraeme[/eluser]
Thanks, your post was very helpfull, just what i was looking for.

I am testing and developing locally with an XAMPP installation and Code Ignite and wanted to be able to send emails from my machine using SMTP and my gmail account.

Your post allowed me to get this set up.

The other thing I needed to do was to enable OpenSSL in my XAMPP installation. Thanks to http://w3it.com/blog/?p=7

Open /apache/bin/php.ini file

Find the line with ;extension=php_openssl.dll and uncomment it by removing the semi-colon from the start of the line.

Restart Apache.

Hope that helps somebody
#10

[eluser]taewoo[/eluser]
Great post.
Gawd I love CodeIgniter




Theme © iAndrew 2016 - Forum software by © MyBB