使用codeigniter库函数发送的邮件作为垃圾邮件发送

时间:2014-11-08 03:49:42

标签: php codeigniter sendmail

我正在使用codeigniter框架。使用codeigniter邮件功能发送邮件时,邮件作为垃圾邮件发送,我不知道为什么会发生这种情况,我使用的代码为:

    $this->load->library('email');
    if($fromname==''){$fromname='MySystem';}
    if($from==''){$from='noreply@gmail.com';}
    if($reply==''){$reply=$from;}
    $config = array(
    'protocol' => 'smtp',
    'smtp_host' => host,
    'smtp_port' => port,
    'smtp_crypto' => 'ssl',
    'smtp_user' => user_nam,
    'smtp_pass' => pwd,
    'mailtype'  => 'html', 
    'charset'   => 'utf-8',
    'wordwrap' => TRUE
   );
    $this->email->initialize($config);
    $this->email->from($from, $fromname);
    $this->email->reply_to($reply, $fromname);
    foreach($result as $row){
    $this->email->to($to);
    $this->email->subject($subject);
    $this->email->message($message1);

    $this->email->send();
    }

通过使用此代码,邮件将发送给一组用户。这些邮件作为垃圾邮件收到。这是因为代码或服务器问题出现了一些错误吗?

2 个答案:

答案 0 :(得分:0)

主要问题可能是您的from地址。发送电子邮件时,您说发件人是noreply@gmail.com。收到您的电子邮件后,该服务会查找Gmail的SPF(http://en.wikipedia.org/wiki/Sender_Policy_Framework)DNS记录,以查看发送该电子邮件的服务器(您的服务器)是否是Gmail认为是允许的发件人的服务器,这当然不是。由于该检查失败,电子邮件很可能最终成为垃圾邮件。

解决此问题的方法是将您的from地址设置为真实域名,例如noreply@yourdomain.com。然后,您需要设置SPF记录,以便您的服务器是该域的可信发件人。有很多教程可以帮助解决这个问题,但您可以在yourdomain.com上将其用作TXT记录:

v=spf1 ip4:<your server IP> ~all

如果您从yourdomain.com发送来自其他服务(例如Google Apps)的电子邮件,您也会想要为此添加规则。

即使这样,您的电子邮件也不能保证不会受到垃圾邮件的侵扰。如果邮件的内容过于简单且类似垃圾邮件,或者您没有包含取消订阅链接,那么您最终也可能会收到垃圾邮件。

答案 1 :(得分:0)

好的,我通过更改$ config并初始化($ config)

来解决问题
$config = array(
        'protocol' => 'smtp',
        'smtp_host' => $host,
        'smtp_port' => $port,
        'smtp_crypto' => $crypto,
        'smtp_user' => $user_nam,
        'smtp_pass' => $pwd,
        'mailtype'  => 'html', 
        'charset'   => 'utf-8',
        'wordwrap' => TRUE,
        'smtp_auth' => TRUE
       );

   $this->load->library('email', $config);
   $this->email->set_newline("\r\n");
   $this->email->initialize($config);