Home » Php » php – how to correct way to send email using codeigniter

php – how to correct way to send email using codeigniter

Posted by: admin July 12, 2020 Leave a comment

Questions:

Hey guy, I’m trying to send email using codeiginiter mail class function, but I found a trouble with smtp protocol. I using gmail smtp protocol.
I running this in local machine.
I’m using Xampp 1.7.4 package, andI have tried setting like below :

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'] = '[email protected]'; // 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('[email protected]', 'Me');
    $this->email->reply_to('[email protected]', 'Me');
    $this->email->to('[email protected]');
    $this->email->subject('testing my mail function with CodeIgniter');
    $this->email->message('<html><body>this is the content</body></html>');

    if ( ! $this->email->send()){
        echo 'error! <br />';
        // Generate error
    }
    echo $this->email->print_debugger();

}

and below error was show in my browser :

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: [email protected]
Subject: =?utf-8?Q?testing_my_mail_function_with_CodeIgniter?=
X-Sender: [email protected]
X-Mailer: CodeIgniter
X-Priority: 3 (Normal)
Message-ID: <[email protected]>
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

<html><body>this is the content</body></html>

--B_ALT_4de5a38938733--
How to&Answers:

For security reasons, Google’s e-mail servers require SSL or TLS in order to send mail. It doesn’t use the standard unencrypted port 25 method of doing it.

You basically have two choices. 1) Use sendmail or mail on your own server to deliver the messages, or 2) use the method described here to send e-mail via Google’s servers using SSL. Good luck, and I hope it this helps.

Answer:

You are attempting to send outbound mail via Gmail on standard SMTP port 25. Gmail does not accept unencrypted connections on that port (or any port). You must use port 465 over SSL.

You must change your $config['smtp_port'] to 465 and your $config['smtp_host'] to 'ssl://smtp.googlemail.com'

More info here

Answer:

You can even use port 587:

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

and smtp-host as:

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

Answer:

I resolved this issue by including the ssl prefix on smtp_host leaving it this way:

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

And be sure to use the 465 port (that’s google’s smtp port):

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

Otherwise, by default google blocks the ‘low security conections’, so you can enter to your google account and configure this option.

Allow less secure apps to access accounts

Activate this option and then try again. Hope this can help you!.

Answer:

1) You smtp port must be 465.

2) You smtp host must be ssl://smtp.gmail.com.

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

$config['smtp_port'] = '465'; // SMTP Port.