使用 Yii2 扩展通过 swiftmailer 发送电子邮件
Sending email with swiftmailer using the Yii2 extension
我正在做一个项目,我想测试发送给用户的电子邮件,但到目前为止我还没有成功设置它。我在 Vagrant 中使用 Codeception 和 运行。我现在想做什么:
return \Yii::$app->mailer->compose()
->setFrom($from)
->setTo($to)
->setSubject('Welcome')
->send();
我有一个 main-local.php,它看起来像这样:
'mailer'=> ['class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'localhost',
'port' => 1025,
'useFileTransport' => false,
],
起初我遗漏了'useFileTransport' => false
,然后我在'transport'之前添加了它,并尝试将它移到'transport'里面,正如你现在看到的,但它是一样的。 file/email 在项目中创建为 .eml 文件,但没有发送邮件。我尝试设置 mailcatcher (http://mailcatcher.me/),并且确实成功了,但如果我可以更改配置,而不是使用不同的方法和更改代码,邮件将被发送到哪里,那就太好了我要它。 (我也尝试使用端口 1080,所以不是。)
如有任何帮助,我们将不胜感激。如果您需要更多信息,请告诉我!
更新:
我发现我有一个不同的配置文件,我实际上可以在其中使用 'useFileTransport' => false
,然后它不会在项目中创建 file/email,但仍然不会发送它。我将 main-local.php 中显示的设置复制到此配置文件中,将 'useFileTransport' => false
移到 'transport' 之前,但我仍在寻找发送这些电子邮件的方法
$useFileTransport 是 yii\swiftmailer\Mailer
class 的 属性,因此不属于 transport
部分。
如果您的邮件程序配置如下,它将尝试通过 SMTP 将邮件投递到您本地主机上端口 1025
上的邮件服务器 运行:
'mailer'=> [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
'useFileTransport' => false,
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'localhost',
'port' => 1025,
],
],
这对我来说有点不寻常,因为 SMTP 的默认端口是 25
。
确保 SMTP 服务器确实在该端口上 运行。例如。通过使用 telnet
命令:
telnet localhost 1025
应该给你这样的东西:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 your.servername ESMTP Postfix
键入 quit
并按回车键退出 SMTP 会话。
您还可以检查通常位于 /var/log/mail.log
的邮件服务器日志文件。您可以使用
查看正在记录的消息
tail -f /var/log/mail.log
当您尝试发送它们时。
折腾了几天,终于找到问题了!
所以问题是我在更新部分提到的另一个配置。隐藏在 codeception/config/config.php 中缺少一行
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
//For email creation in project
//'useFileTransport' => true,
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'localhost',
'port' => 1025,
'encryption' => '',
],
],
我只需要加密,只需为空即可。电子邮件现在正在按预期方式发送,而且看起来不错!
希望这对那里的人有帮助,测试愉快!
我正在做一个项目,我想测试发送给用户的电子邮件,但到目前为止我还没有成功设置它。我在 Vagrant 中使用 Codeception 和 运行。我现在想做什么:
return \Yii::$app->mailer->compose()
->setFrom($from)
->setTo($to)
->setSubject('Welcome')
->send();
我有一个 main-local.php,它看起来像这样:
'mailer'=> ['class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'localhost',
'port' => 1025,
'useFileTransport' => false,
],
起初我遗漏了'useFileTransport' => false
,然后我在'transport'之前添加了它,并尝试将它移到'transport'里面,正如你现在看到的,但它是一样的。 file/email 在项目中创建为 .eml 文件,但没有发送邮件。我尝试设置 mailcatcher (http://mailcatcher.me/),并且确实成功了,但如果我可以更改配置,而不是使用不同的方法和更改代码,邮件将被发送到哪里,那就太好了我要它。 (我也尝试使用端口 1080,所以不是。)
如有任何帮助,我们将不胜感激。如果您需要更多信息,请告诉我!
更新:
我发现我有一个不同的配置文件,我实际上可以在其中使用 'useFileTransport' => false
,然后它不会在项目中创建 file/email,但仍然不会发送它。我将 main-local.php 中显示的设置复制到此配置文件中,将 'useFileTransport' => false
移到 'transport' 之前,但我仍在寻找发送这些电子邮件的方法
$useFileTransport 是 yii\swiftmailer\Mailer
class 的 属性,因此不属于 transport
部分。
如果您的邮件程序配置如下,它将尝试通过 SMTP 将邮件投递到您本地主机上端口 1025
上的邮件服务器 运行:
'mailer'=> [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
'useFileTransport' => false,
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'localhost',
'port' => 1025,
],
],
这对我来说有点不寻常,因为 SMTP 的默认端口是 25
。
确保 SMTP 服务器确实在该端口上 运行。例如。通过使用 telnet
命令:
telnet localhost 1025
应该给你这样的东西:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 your.servername ESMTP Postfix
键入 quit
并按回车键退出 SMTP 会话。
您还可以检查通常位于 /var/log/mail.log
的邮件服务器日志文件。您可以使用
tail -f /var/log/mail.log
当您尝试发送它们时。
折腾了几天,终于找到问题了!
所以问题是我在更新部分提到的另一个配置。隐藏在 codeception/config/config.php 中缺少一行
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
//For email creation in project
//'useFileTransport' => true,
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'localhost',
'port' => 1025,
'encryption' => '',
],
],
我只需要加密,只需为空即可。电子邮件现在正在按预期方式发送,而且看起来不错!
希望这对那里的人有帮助,测试愉快!