【问题标题】:Yii2 Send email by any username and passwordYii2 使用任何用户名和密码发送电子邮件
【发布时间】:2020-05-15 16:00:40
【问题描述】:

我如何通过任何电子邮件帐户和密码发送电子邮件,如下所示或通过任何其他方式:

$mail->setFrom('from@gmail.com');
$mail->setPassword('abcxyz');
$mail->setHeader('This is a header');
$mail->setBCC('bcc@gmail.com');
$mail->setCC('cc@gmail.com');
$mail->setContent('contents absjadha ');
$mail->send();

我有超过 100 封电子邮件,我想用它向我的用户发送电子邮件让他们通过我的工具向其他人发送电子邮件。是否有任何 Yii2 插件或扩展可以帮助我解决这个问题?提供他们所有的电子邮件和密码存储在我的数据库中。提前谢谢!

【问题讨论】:

  • 如果您正在寻找使用 gmail 的解决方案,答案在这里stackoverflow.com/a/29600264/3364821 - 它也适用于其他提供商,并且仅具有不同的配置。但是,如果您希望您的用户向您提供他们的凭据以使用他们的电子邮件帐户,我认为这不会发生。
  • 用户应该使用他们的凭据来做到这一点,我们只需创建一个前端并发送电子邮件......

标签: php email yii2 sendmail


【解决方案1】:

把这个直接放到Controller

Yii::$app->mailer->setTransport([
    'class' => 'Swift_SmtpTransport',
    'host' => 'smtp.gmail.com',
    'username' => $emailFrom,
    'password' => $password,
    'port' => '465',
    'encryption' => 'ssl',
    // smtp.gmail.com    ---   StartTLS ---   587
    // smtp.gmail.com    ---    SSL       ---      465
]);

在这一行之前

Yii::$app->mail->compose('@common/mail/cron_acordo', ['model_definicoes' => $model_definicoes])

【讨论】:

  • 这可能很危险,因为它改变了全局邮件,可以在其他地方使用。在最坏的情况下,您可以使用其中一位用户的 Gmail 帐户发送一些敏感邮件(发送的邮件可能会自动保存在 Gmail 邮箱中,因此该用户可以访问您使用他的帐户发送的所有邮件)。
  • @rob006 有什么办法可以避免吗?
  • 是的,我在答案中发布了它。
  • 我用了你的方法,但是运行不起来
  • “它无法运行”并不是真正的描述性......为什么它不起作用?有任何错误信息吗?在哪一行?
【解决方案2】:

您可以为此任务实例化自定义邮件组件:

$mailer = Yii::createObject([
    'class' => 'yii\swiftmailer\Mailer',
    'viewPath' => '@common/mail',
    'transport' => [
        'class' => 'Swift_SmtpTransport',
        'host' => $userHost,
        'username' => $userEmail,
        'password' => $userPassword,
        'port' => 587,
        'encryption' => 'tls',
    ],
]);

$mail = $mailer->compose('@common/mail/cron_acordo', ['model_definicoes' => $model_definicoes]);
$mail->setFrom('from@gmail.com');
$mail->setPassword('abcxyz');
$mail->setHeader('This is a header');
$mail->setBCC('bcc@gmail.com');
$mail->setCC('cc@gmail.com');
$mail->setContent('contents absjadha ');
$mail->send($mailer);

【讨论】:

  • $mail->setFrom('from@gmail.com'); $mail->setPassword('abcxyz'); $mail->setHeader('这是一个标题'); $mail->setBCC('bcc@gmail.com'); $mail->setCC('cc@gmail.com'); $mail->setContent('内容absjadha'); $邮件->发送();方法也没找到!
【解决方案3】:

首先,您已设置电子邮件凭据以发送电子邮件:有关更多信息,您可以阅读read email tutorial 所以在你的配置文件中要么在main.php or main-local.php

'mailer' => [
           'class' => 'yii\swiftmailer\Mailer',
           'viewPath' => '@common/mail',
           'transport' => [
               'class' => 'Swift_SmtpTransport',
               'host' => 'smtp.gmail.com',
               'username' => 'emailaddress',
               'password' => '******',
               'port' => '587',
               'encryption' => 'tls',
           ],
           'useFileTransport' => false,
       ],

配置好邮件组件后,您可以使用以下代码发送电子邮件:

Yii::$app->mailer->compose()
    ->setFrom('from@domain.com')
    ->setTo('to@domain.com')
    ->setSubject('Message subject')
    ->setTextBody('Plain text content')
    ->setHtmlBody('<b>HTML content</b>')
    ->send();

在上面的示例中,方法 compose() 创建了邮件消息的实例,然后填充并发送该实例。如果需要,您可以在此过程中添加更复杂的逻辑:

$message = Yii::$app->mailer->compose();
if (Yii::$app->user->isGuest) {
    $message->setFrom('from@domain.com');
} else {
    $message->setFrom(Yii::$app->user->identity->email);
}
$message->setTo(Yii::$app->params['adminEmail'])
    ->setSubject('Message subject')
    ->setTextBody('Plain text content')
    ->send();

【讨论】:

    猜你喜欢
    • 2019-01-20
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 2011-11-08
    • 2018-12-05
    • 1970-01-01
    • 2015-06-10
    相关资源
    最近更新 更多