这是一些可能正在搜索此线程以找到此问题的答案的人的旁注。(在实施此解决方案之前,请务必阅读底部的注意事项。)我在为我的 MS Office 365 订阅没有用户或域的客户发送电子邮件时遇到问题。我试图通过我的Me@MyDomain.com 365 帐户发送 SMTP,但 .NET 邮件消息是从Client@ClientDomain.com 发送的。这是为我弹出“5.7.1 客户端没有权限”错误的时候。为了补救,MailMessage类需要将Sender属性设置为我提供的 SMTP 凭据在 O365 中有权“发送为”的电子邮件地址。我选择使用我的主帐户电子邮件(Me@MyDomain.com) 如下面的代码所示。请记住,我可以使用我的 O365 帐户有权“发送为”的任何电子邮件地址(即 Support@MyDomain.com、no-reply@MyDomain.com 等)
using System;
using System.Net.Mail;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
using (
MailMessage message = new MailMessage
{
To = { new MailAddress("Recipient1@Recipient1Domain.com", "Recipient 1") },
Sender = new MailAddress("Me@MyDomain.com", "Me"),
From = new MailAddress("Client@ClientDomain.com", "Client"),
Subject=".net Testing"
Body="Testing .net emailing",
IsBodyHtml=true,
}
)
{
using (
SmtpClient smtp = new SmtpClient
{
Host = "smtp.office365.com",
Port = 587,
Credentials = new System.Net.NetworkCredential("Me@MyDomain.com", "Pa55w0rd"),
EnableSsl = true
}
)
{
try { smtp.Send(message); }
catch (Exception excp)
{
Console.Write(excp.Message);
Console.ReadKey();
}
}
}
}
}
}
请注意 SmtpClient 只是一次性的,并且能够使用 .NET Framework 4 中的 Using 块
.NET Framework 2 到 3.5 的用户应该使用 SmtpClient ......
SmtpClient smtp = new SmtpClient
{
Host = "smtp.office365.com",
Port = 587,
Credentials = new System.Net.NetworkCredential("Me@MyDomain.com", "Pa55w0rd"),
EnableSsl = true
};
try { smtp.Send(message); }
catch (Exception excp)
{
Console.Write(excp.Message);
Console.ReadKey();
}
生成的电子邮件标题将如下所示:
Authentication-Results: spf=none (sender IP is )
smtp.mailfrom=Me@MyDomain.com;
Received: from MyPC (192.168.1.1) by
BLUPR13MB0036.namprd13.prod.outlook.com (10.161.123.150) with Microsoft SMTP
Server (TLS) id 15.1.318.9; Mon, 9 Nov 2015 16:06:58 +0000
MIME-Version: 1.0
From: Client <Client@ClientDomain.com>
Sender: Me <Me@MyDomain.com>
To: Recipient 1 <Recipient1@Recipient1Domain.com>
-- 小心 --
请注意,某些邮件客户端可能会将发件人地址显示为注释。例如 Outlook 将在阅读窗格的标题中显示以下内容:
我 <Me@MyDomain.com> 代表客户 <Client@ClientDomain.com>
但是,只要收件人使用的电子邮件客户端不是完全垃圾,这不会影响回复地址。回复应仍使用发件人地址。为了覆盖您的所有基础,您还可以利用 MailMessage.ReplyToList 属性为客户端提供使用正确回复地址的每一个机会。
此外,请注意,某些电子邮件服务器可能会完全拒绝任何代表另一家网站所有者政策限制的公司发送的电子邮件。一定要彻底测试并寻找任何反弹。我可以告诉你,我的个人 Hotmail (mail.live.com) 电子邮件帐户会拒绝我代表我的某个客户发送的邮件,但其他客户可以通过。虽然我怀疑它与我客户的域 TXT“spf1”记录有关,但我没有答案为什么它会拒绝代表一个域而不是另一个域发送的电子邮件。也许知道的人可以对这个主题有所了解?