Yii2 Отправить письмо по любому имени пользователя и паролю - PullRequest
0 голосов
/ 30 января 2020

Как я могу отправить электронное письмо на любую учетную запись электронной почты и пароль , как указано ниже, или любым другим способом:

$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 , которые могут помочь мне решить эту проблему? При условии, что все их адрес электронной почты и пароль хранятся в моей базе данных . Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 30 января 2020

Вы можете создать пользовательский компонент почтовой программы для этой задачи:

$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);
0 голосов
/ 31 января 2020

Поместите это непосредственно в Контроллер

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])

0 голосов
/ 30 января 2020

Прежде всего, вы настроили учетные данные электронной почты для отправки электронных писем: для получения дополнительной информации вы можете прочитать прочитать учебное пособие по электронной почте Так что в вашем конфигурационном файле либо в 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 () создает экземпляр почтового сообщения, который затем заполняется и отправляется , При необходимости вы можете поместить более сложные логики c в этот процесс:

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