php - 在 symfony 中使用 office365 服务器和 swiftmailer 发送电子邮件
问题描述
我正在尝试在 symfony 中使用 swiftmailer 和 office365 服务器注册后发送确认电子邮件。我已经尝试过我遇到的所有主机、端口和加密类型的组合。
目前我的 .env 文件包含这一行:
MAILER_URL=smtp://smtp.office365.com:587?encryption=ssl&auth_mode=login&username="myusername@mycompany.com"&password="mypassword"
*注意:我使用“”作为我的用户名和密码,因为它们包含特殊字符,并且我在某处读到这可能会导致 MAILER_URL 出现问题。
我的 swiftmailer.yaml 文件包含以下内容:
swiftmailer:
url: '%env(MAILER_URL)%'
stream-options:
ssl:
allow_self_signed : true
verify_peer: false
最后,我在控制器中使用此代码发送电子邮件:
$message = (new \Swift_Message('Referral tool registration'))
->setFrom('myusername@mycompany.com')
->setTo('test@gmail.com')
->setBody(
$this->renderView(
'email/notification/user_registered.html.twig',
['firstName' => $user->getFirstName(),
'lastName' => $user->getLastName()
]
),
'text/html'
);
$mailer->send($message);
通过当前选择的主机、端口和加密,我得到:"Connection could not be established with host smtp.office365.com [ #0]"
更新:当我输入 telnet smtp.office365.com 587 我得到一个有效的响应,所以我认为问题与网络无关,端口没有被阻塞。
解决方案
您必须使用encryption=tls
,对您的 USER_NAME 和 PASSWORD 进行 urlencode,并且您不应该像以前那样将 USER_NAME 和 PASSWORd 用引号括起来。
让我们假设这些凭据并对它们进行 urlencode:
USERNAME = `email@domain.tld` → `email%40domain.tld`
PASSWORD = `pa$$w#rd` → `pa%24%24w%23rd`
具有上述凭据的正确配置将如下所示:
MAILER_URL=smtp://smtp.office365.com:587?encryption=tls&auth_mode=login&username=email%40domain.tld&password=pa%24%24w%23rd
推荐阅读
- python - Python 请求发布 - 超过 HTTPSConnectionPool 最大重试次数
- angular - Angular 中的 HTTP 获取请求
- sql - 使用分区计算当前作业
- php - Laravel 包开发 - 目标类 [ControllerName] 不存在
- django - pymemcached 和 Django 3.2 的权限错误
- python - Python:“../DATA/file.csv”不再适用于文件打开
- python - 在 for 循环中创建函数来控制 ToggleButton,后期绑定问题(ipywidgets JupyterLab)
- javascript - JQuery Datatable Refresh - 无法在 MVC 控制器端接收参数值
- ssh - 无法通过 Bitnami LAMP 堆栈上的 SSH 隧道连接到 phpMyAdmin
- windows - 为什么坚持无效命令?