Codeigniter SMTP Email with Amazon SES

后端 未结 5 1929
天命终不由人
天命终不由人 2021-02-05 06:43

I think yesterday Amazon announced SMTP support for SES (Simple Email Service).

I tried to send SMTP email with Codeigniter with no luck.

I have a verified sende

相关标签:
5条回答
  • 2021-02-05 07:01
    public function enviar_email($para, $assunto, $mensagem, $formato='html'){
                $this->CI->load->library('email');
                $config['mailtype']     = $formato;
                $config['useragent']    = 'Post Title';
                $config['protocol']     = 'smtp';
                $config['smtp_host']    = 'tls://email-smtp.us-east-1.amazonaws.com';
                $config['smtp_user']    = 'smtpuser';
                $config['smtp_pass']    = 'smtppass';
                $config['smtp_port']    = '465';
                $config['wordwrap']     = TRUE;
                $config['newline']      = "\r\n"; 
    
                $this->CI->email->initialize($config);
    
                $this->CI->email->from('Your Verified Sender Email', 'Post Title');
                $this->CI->email->to($para);
                $this->CI->email->subject($assunto);
                $this->CI->email->message($mensagem);
    
    
                if($this->CI->email->send()):
                        return TRUE;
                else:
                        $this->CI->email->print_debugger();
                endif;
    
        } 
    
    0 讨论(0)
  • 2021-02-05 07:08

    I also needed to add the line

    $config['smtp_crypto']  = 'tls';
    

    to my config array

    this is supported by CI 2.1.0 and greater

    0 讨论(0)
  • 2021-02-05 07:12

    I got that timeout message until I added the line:-

    $this->email->set_newline("\r\n");
    

    I have my host set as ssl://email-smtp.us-east-1.amazonaws.com

    0 讨论(0)
  • 2021-02-05 07:12

    You need to do 3 things to get CI to work with Amazon Simple Email Service (SES)

    1. Need to set newline = \r\n or you will get a timeout.
    2. Need to set smtp_crypto to something. (New requirement)
    3. Need to make sure "from" email address is approved in Amazon SES. I made my "from" email address "no-reply@mydomain.com"

    Additionally, you should set up DKIM for your "from" email address to prevent emails from getting put in spam folders. This involves going into Amazon SES -> Identity Management -> Email Addresses -> DKIM, hitting the enable button, and adding 3 DNS entries to your website's DNS.

    No need to do anything special to set up SPF. The envelope domain amazonses.com passes SPF.

    Finally, make sure to use "reply-to" if you want users to be able to reply to an e-mail address different from your approved "from" e-mail address.

    Example working code:

    $obj = &get_instance();
    
    $config['protocol'] = 'smtp';
    $config['smtp_host'] = 'email-smtp.us-west-2.amazonaws.com';
    $config['smtp_user'] = 'USER';
    $config['smtp_pass'] = 'PASS';
    $config['smtp_port'] = '587';
    $config['newline'] = "\r\n";
    $config['smtp_crypto'] = 'tls';
    $obj->email->initialize($config);
    
    $obj->email->set_mailtype('html');
    // don't html_escape email header variables
    $obj->email->from(MV_FROM_EMAIL, $from_name);
    $obj->email->reply_to($from_email, $from_name);
    $obj->email->to($to);
    $obj->email->subject($subject);
    $obj->email->message($obj->load->view($path, html_escape($data), true));
    $obj->email->send();
    
    0 讨论(0)
  • 2021-02-05 07:14

    The setup that worked for me looks like this:

    $test_config['protocol'] = 'smtp';
    $test_config['smtp_host'] = 'ssl://email-smtp.us-east-1.amazonaws.com';
    $test_config['smtp_port'] = '465';
    $test_config['smtp_user'] = 'XXXXXXXXXXXXXXXXXXX';
    $test_config['smtp_pass'] = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY';
    $test_config['newline']      = "\r\n"; 
    
    $this->email->initialize($test_config);
    
    $this->email->from('from@test.com', 'From at Test.com');
    $this->email->to('To@Test.com');
    
    $this->email->subject('Email Test');
    $this->email->message('Testing the email class.');
    
    $this->email->send();
    

    The newline character must be set to "\r\n", and can bet set in the config file, if properly set as "\r\n", not '\r\n' as noted above.

    0 讨论(0)
提交回复
热议问题