Codeigniter SMTP电子邮件与Amazon SES

fivyi3re  于 2023-08-01  发布在  其他
关注(0)|答案(5)|浏览(158)

我想昨天亚马逊宣布了对SES(简单电子邮件服务)的SMTP支持。
我试图发送SMTP电子邮件与Codeigniter没有运气。
我有一个经过验证的发件人,一切看起来都很好:

$this->load->library('email');

$config = array(
    'protocol' => 'smtp',
    'smtp_host' => 'email-smtp.us-east-1.amazonaws.com',
    'smtp_user' => 'SMTP USERNAME',
    'smtp_pass' => 'SMTP PASSWORD',
    'smtp_port' => 465,
    'mailtype' => 'html'
);

$this->email->initialize($config);
$this->email->print_debugger();

$this->email->from('verified_email_address@something.com', 'Test From');
$this->email->to('email@example.com', 'Test To');
$this->email->subject('Test');
$this->email->message('test');

$this->email->send();

字符串
我尝试了下面的smtp_host:

  • email-smtp.us-east-1.amazonaws.com
  • tls:email-smtp.us-east-1.amazonaws.com
  • ssl:email-smtp.us-east-1.amazonaws.com

当我回显print_debugger()时,我得到:

220 email-smtp.amazonaws.com ESMTP SimpleEmailService-194655181
hello: 421 Timeout waiting for data from client.


这些测试在mediatemple(gs)服务器上运行。

llycmphe

llycmphe1#

我得到了超时消息,直到我添加了这行:

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

字符串
我将主机设置为ssl://email-smtp.us-east-1.amazonaws.com

yqhsw0fo

yqhsw0fo2#

要让CI与Amazon Simple Email Service(SES)配合使用,您需要做三件事
1.需要设置newline = \r\n,否则将超时。
1.需要将smtp_crypto设置为某个值。(新要求)
1.需要确保“发件人”电子邮件地址在Amazon SES中得到批准。我做了我的“从”电子邮件地址“no-reply@mydomain.com”
此外,您应该为您的“发件人”电子邮件地址设置DKIM,以防止电子邮件被放入垃圾邮件文件夹。这涉及到进入Amazon SES ->身份管理->电子邮件地址-> DKIM,点击启用按钮,并将3个DNS条目添加到您网站的DNS。
不需要做任何特殊的设置SPF。信封域amazonses.com通过SPF。
最后,如果您希望用户能够回复不同于您批准的“发件人”电子邮件地址的电子邮件地址,请确保使用“回复”。
示例工作代码:

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

字符串

nmpmafwu

nmpmafwu3#

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;

    }

字符串

ryhaxcpt

ryhaxcpt4#

我还需要添加一行

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

字符串
到我的配置阵列
这是supported by CI 2.1.0 and greater

fslejnso

fslejnso5#

对我有效的设置看起来像这样:

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

字符串
换行符必须设置为“\r\n”,并且可以在配置文件中设置,如果正确设置为“\r\n”,而不是如上所述的“\r\n”。

相关问题