Yii 2邮件 - 错误"来自"字段

时间:2016-12-08 22:25:55

标签: php email yii2 gmail mailer

我试图在Yii发送电子邮件2.一切都很好但我有一个奇怪的事情 - 我总是收到错误的电子邮件"来自"地址(用setFrom()设置)。

这是代码:

public function afterSave($insert, $changedAttributes){
    $this->send_email($this->attributes);
}

此属性来自我的表单到电子邮件发送方法,并且数据是正确的。在下一步中,我尝试发送电子邮件:

public function send_email($data)
{
    return Yii::$app->mailer->compose('contactEmail', ['data'=>$data])
            ->setFrom($data['email'])
            ->setTo('johny@gmail.com')
            ->setSubject($data['subject'])
            ->setTextBody($data['message'])
            ->send();
}

我想始终将电子邮件发送到我的地址:johny@gmail.com。我总是收到邮件,但电子邮件是从地址johny@gmail.com发送的,而不是从$data['email']中设置的。我已尝试使用var_dump进行检查,并在此处获得了正确的数据:

public function send_email($data)
{
    var_dump($data['email']);
    exit();

    return Yii::$app->mailer->compose('contactEmail', ['data'=>$data])
            ->setFrom($data['email'])
            ->setTo('johny@gmail.com')
            ->setSubject($data['subject'])
            ->setTextBody($data['message'])
            ->send();
}

例如,当我填写所有表单输入时,我设置test@gmail.com作为发件人var_dump返回test@gmail.com但是当我检查收到的电子邮件时,它始终来自johny@gmail.com。我使用->setFrom('test@gmail.com')时的相同情况 - 在Gmail中仍然收到来自johny@gmail.com的消息。我无法理解为什么我无法通过表单中输入的电子邮件收到消息。我在这做错了什么?

1 个答案:

答案 0 :(得分:1)

如果不知道您使用什么作为SMTP服务器,很难回答这个问题。

假设您使用Gmail(smtp.gmail.com)作为SMTP服务器: 问题在于Gmail服务器本身配置的设置。它不允许您将From字段指定为除电子邮件地址或其中一个别名之外的值。因此,如果您通过身份验证johny@gmail.com,您将被允许以johny@gmail.com或任何配置为别名的帐户发送电子邮件。

有关别名的详细信息,请参阅:https://support.google.com/mail/answer/22370?hl=en

如果您不使用Gmail(smtp.gmail.com)作为SMTP服务器:

请提供您的SMTP配置(不要忘记排除密码)?

'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'transport' => [
                'class' => 'Swift_SmtpTransport',
            --->.........
            ],