Вот примечание для некоторых, которые могут искать в этой теме ответ на эту проблему.(Обязательно прочтите предостережения внизу, прежде чем внедрять это решение.) У меня были проблемы с отправкой электронных писем для клиента, для которого в моей подписке MS Office 365 не было пользователя или домена.Я пытался выполнить SMTP через мою учетную запись Me@MyDomain.com 365, но почтовое сообщение .NET было адресовано Client@ClientDomain.com.Это когда у меня появляется ошибка «5.7.1 Клиент не имеет разрешений».Чтобы исправить ситуацию, классу MailMessage необходимо было задать для свойства Отправитель адрес электронной почты, для которого мои предоставленные учетные данные 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 предназначен только для одноразового использования и может использовать блок Using в .NET Framework 4
Пользователи .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от имени Клиента
Однако, поскольку почтовый клиент, который использует получатель, не является полным мусором, это не должно влиять на адрес ответа.Для ответа по-прежнему следует использовать адрес отправителя.Чтобы покрыть все ваши базы, вы также можете использовать свойство MailMessage.ReplyToList, чтобы предоставить клиенту любую возможность использовать правильный адрес ответа.
Также следует помнить, что некоторые почтовые серверы могут категорически отвергать любые электронные письма, отправленные от имени другой компании, которая размещает ограничения политики владельца домена.Обязательно тщательно проверьте и поищите любые отскок назад.Я могу сказать вам, что моя личная учетная запись электронной почты Hotmail (mail.live.com) будет отклонять сообщения, которые я отправляю от имени определенного моего клиента, но другие клиенты проходят нормально.Хотя я подозреваю, что это как-то связано с записями TXT «spf1» домена моего клиента, у меня нет ответа на вопрос, почему он будет отклонять электронные письма, отправленные от имени одного домена, по сравнению с другим.Может быть, кто-то, кто знает, может пролить свет на эту тему?