无法通过SMTP发送电子邮件,因为“550 - 不允许继电器”

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (239)

我正在使用CakePHP向客户发送自动电子邮件。它一直很好用,但似乎有些收件人没有收到我们的电子邮件。所以我决定使用SMTP选项发送电子邮件,并通过Media Temple的电子邮件提供商发送电子邮件。但是,当尝试从Media Temple帐户发送电子邮件时,我收到错误“550-不允许中继”。听起来像Media Temple服务器只是不允许我通过它发送邮件。这很奇怪,因为我已经确认我使用的用户名和密码是正确的,我可以通过SMTP从我的macmail客户端和iPhone邮件客户端发送邮件。我还确认我的cakephp电子邮件设置是正确的,因为我可以通过SMTP发送电子邮件,其中gmail帐户与cakephp中的配置完全相同。知道为什么我' 我得到这个错误以及如何解决它?谢谢

这是处理发送电子邮件的代码。我使用这个类就像许多不同控制器中的常规EmailComponent一样。

    class CanadafindsEmailerComponent extends EmailComponent 
{ 
    ...
    function send($content = null, $template = null, $layout = null) {  
    if(!in_array(TECHY_MONITOR_EMAIL,$this->bcc) && is_array($this->bcc))
        $this->bcc[]=TECHY_MONITOR_EMAIL;
    else if (!in_array(TECHY_MONITOR_EMAIL,$this->bcc) && !is_array($this->bcc))
        $this->bcc=array(TECHY_MONITOR_EMAIL);
    if(DEVSITE){//commented-out code are settings for smtp with gmail, which works fine
        $this->delivery = 'smtp'; 
        $this->smtpOptions = array(
            'port'=>'465',//'465', 
            'timeout'=>'30',//'30',
            'auth' => true,
            'host' => 'ssl://mail.thenumber.biz',//'ssl://smtp.gmail.com',
            'username'=>USERNAME,//'USERNAME@gmail.com',
            'password'=>SMTP_PASSWORD//,
        );
        $this->to=$this->correctFormatOn($this->to);
        $this->bcc=$this->correctFormatOn($this->bcc);
        $this->cc=$this->correctFormatOn($this->cc);
        $this->replyTo=$this->correctFormatOn($this->replyTo);
        $this->from=$this->correctFormatOn($this->from);
    }
    return parent::send($content,$template,$layout);
   }
   function correctFormatOn(&$email){
    if(is_array($email)){
        $copiedEmail=array();
        foreach($email as $singleEmail){
            $copiedEmail[]=$this->correctFormatOnSingle($singleEmail);
        }
        $email=$copiedEmail;
    }else{
        $email=$this->correctFormatOnSingle($email);
    }
    return $email;

   }

   function correctFormatOnSingle(&$email){
    $subEmails=explode(",",$email);
    $fixedSubEmails=array();
    foreach($subEmails as $subEmail){
        $fixedSubEmails[]=preg_replace('/<?([^< ]+)@([^>,]+)[>,]?/i', '<$1@$2>', trim($subEmail));
    }
    $email=implode(",",$fixedSubEmails);
    return $email;
   }
}
提问于
用户回答回答于

我遇到的主要问题是客户端没有收到来自我们服务器的电子邮件(因此我想使用SMTP服务器来查看是否会修复它,而不是服务器的默认电子邮件服务器)。但我设法通过进行一些其他更改让这些客户端从服务器接收电子邮件,从而无需使用SMTP和Media Temple电子邮件服务器。 (作为一个仅供参考,我发现,我们得到来自客户端的电子邮件服务器,说明诊断码邮件退回:SMTP; 550次访问被拒绝 - 无效HELO域名(参见RFC2821 4.1.1.1),但他们被直接发送回服务器,进入linux用户帐户“www-data”。(我在/ var / mail / www-data中读取它们,只使用tail和vim)。我发现正​​在处理发送电子邮件的postfix正在标记电子邮件发件人的主机名(即“HELO名”)作为canadafinds3,名字我给服务器Rackspace公司,而不是域名:canadafinds.com所以我改变了这一切在/etc/postfix/main.cf文件,重新启动后缀,等瞧!没有更多来自那些特定客户的反弹,每个人都很开心。)

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励