我正在编写一个Rust应用程序,它将通过启用了SMTP功能的Exchange服务器发送电子邮件。根据微软的网页,需要的设置是:
网络邮件服务的POP/IMAP设置证实了这一点。
这是我的代码(带有一些审查):
extern crate lettre;
use self::lettre::email::EmailBuilder;
use self::lettre::transport::smtp::{SecurityLevel, SmtpTransportBuilder, SUBMISSION_PORT};
use self::lettre::transport::smtp::authentication::Mechanism;
use self::lettre::transport::EmailTransport;
pub fn send_mail() {
let email = EmailBuilder::new()
.from("my email")
.to("destination email")
.body("testing")
.subject("testing")
.build()
.unwrap();
// Connect to SMTP server
let mut transport = SmtpTransportBuilder::new(("smtp.office365.com", SUBMISSION_PORT))
.expect("Failed to create email transport")
.encrypt()
.smtp_utf8(true)
.credentials("my email", "my password")
.authentication_mechanism(Mechanism::Login)
.build();
println!("Mail transport built");
println!("{:?}", transport.send(email.clone()));
}
当我编译和运行代码时,它给了我这个错误:
错误(永久(响应{代码:代码{严重性:PermanentNegativeCompletion,类别:未指定3,详细信息:0},消息:[“5.7.57 SMTP;客户端未通过身份验证,无法在来自[SYXPR01CA0106.ausprd01.prod.outlook.com]的邮件发送过程中发送匿名邮件))
为什么会发生这种情况?
我在研究中遇到的最接近的是 GitHub 上与不支持登录
身份验证机制(Office 365 使用的)的 lettre 库有关的问题;但是,代码库已更新为支持登录,我直接从 GitHub 使用主分支,因此理论上我的应用程序应该支持
登录
机制。
编辑:忘记提到我尝试对服务器进行EHLO,但它返回了(客户端:(连接已关闭))错误。
我使用telnet和openssl尝试直接连接到SMTP服务器,在那里我发现AUTH LOGIN需要3个命令;一个发送AUTH LOGIN代码,一个发送用户名,另一个发送密码。我发现lettre库将其所有AUTH命令实现为单个命令,因此这不适用于服务器。我下载了库的源代码,更改了send函数以执行三个单独的命令,重新编译了代码,一切都很好:)
我对字母代码的补充:
if (accepted_mechanisms[0] == Mechanism::Login) &&
(accepted_mechanisms.capacity() == 1) {
try_smtp!(self.client.command("AUTH LOGIN"), self);
try_smtp!(self.client.command(base64::encode_config(
&username.as_bytes(),
base64::STANDARD).as_str()), self);
try_smtp!(self.client.command(base64::encode_config(
&password.as_bytes(),
base64::STANDARD).as_str()), self);
我有一个java程序(从谷歌复制的)可以使用office365 SMTP发送电子邮件,它作为一个独立的java程序运行良好,但当我在web应用程序的中将这个java程序部署为jar文件,并从JSP调用该方法时,它抛出了以下错误: 有人能分享一下他们对这个问题的看法吗。java代码:
我必须用我的网络应用程序发送邮件。给定下面显示< code >的代码,SMTP服务器需要安全连接,或者客户端未通过身份验证。服务器响应是: 5.7.57 SMTP;客户端在邮件发送过程中未通过身份验证发送匿名邮件。 帮我找到一个合适的解决方案。非常感谢。 代码:
我正在用asp发送outlook电子邮件。净c#。 当我运行这个程序时,我在(smtp.Send(fromAddress,toAddress,subject,body);)上遇到了一个错误我在网上搜索,试图解决问题,但什么也没找到。请帮忙。我真的很感激。
我目前拥有的代码是: 我试图发送到的电子邮件地址托管在Office 365的Outlook上。我们可能需要稍后更改特定地址,但它们可能配置相同。 但是,每当我尝试运行命令时,都会收到同样的错误,错误的全文是: 我已经尝试了一些不同的方法,比如在25到587之间切换端口,将主机更改为office365的,或者将和切换为true或false。但是我总是看到同样的错误。我还遗漏了什么吗?
这仅适用于(smtp.office365.com)smtp。
SMTP服务器 ; [myserverName] 默认用户电子邮件后缀 ; [myemailId] 使用SMTP身份验证 ; true 用户名称 ; [myemailId] 密码 ; [mypassword] 使用SSL ; 假 SMTP