我的项目使用Nodemailer从服务器发送服务电子邮件。代码在我的本地环境中运行良好,但当部署到Cloud Foundry时,它在电子邮件发送连接上超时。
在应用程序容器中使用SSH,curl google.com
工作,但curl --ssl smtp://smtp.email.uk-london-1.oci.oraclecloud.com
不工作并且超时。
我在哪里以及如何配置这个网络访问?
/sendEmail.ts
export async function sendEmail(toEmail): Promise<<SMTPTransport.SentMessageInfo> {
const transporter = nodemailer.createTransport({
host: ENDPOINTS.smtp.endpoint,
port: ENDPOINTS.smtp.port,
secure: false,
requireTLS: true,
auth: {
user: ENDPOINTS.smtp.credentials.id,
pass: ENDPOINTS.smtp.credentials.pass
}
});
return
await transporter.sendMail({
from: ...,
to: toEmail,
subject: ...
text: ...,
html: ...
})
}
const ENDPOINTS = {
smtp: {
endpoint: 'smtp.email.uk-london-1.oci.oraclecloud.com',
port: 25,
from: 'accounts-noreply@example.com',
credentials: {
id: ...,
pass: ...
}
}
}
不能使用端口25的原因是大多数云提供商阻止对它的访问。
这样做的原因是25是未经验证的,并且经常被SPAMers滥用。大多数电子邮件提供商维护电子邮件声誉系统已知的垃圾邮件的起源IP地址。因此,如果您是云提供商,您不会希望成为每个人都列入黑名单的人。
TCP端口587用于身份验证的SMTP访问,所以它对SPAMers需要发送欺骗邮件的用处不大。
如果你有更高的/企业订阅,大多数云提供商仍然允许你发送超过25封的电子邮件。
的有用链接:
- 我可以在端口25上使用出站邮件吗?- IBM Cloud
- 解决Azure中出站SMTP连接问题
- 如何删除端口25 AWS
- 来自OCI租户的出站Internet电子邮件(端口25)默认被阻止
- 如何阻止端口25防止垃圾邮件
尝试使用587端口代替25端口。通常,端口25用于SMTP的未加密传输,端口587用于基于SSL/tls的加密传输。通常,端口25被阻塞,因为频繁的误用。
对于我的项目,我通常甚至不麻烦使用端口25,而是直接尝试587。