我有一种从c#发送邮件的方法:
public static void SendEmailWebService(string asunto, string body, string to)
{
try
{ // takes config from web.config
MailMessage mm = new MailMessage
{
From = new MailAddress(@"no-reply@site.com", @"Notificacion"),
To = { new MailAddress(to) },
Subject = asunto,
IsBodyHtml = true,
Body = body,
HeadersEncoding = System.Text.Encoding.UTF8,
SubjectEncoding = System.Text.Encoding.UTF8,
BodyEncoding = System.Text.Encoding.UTF8
};
Smtp.Send(mm);
}
catch (Exception ex)
{
// Error
}
}
如果我正常地称这种方法,它可以工作,但如果我从网络服务中调用它,那么它就会失败。
在cathc中,例外是:
此邮件服务器在尝试发送到a时需要身份验证 非本地电子邮件地址。请检查您的邮件客户端设置或 请与您的管理员联系以验证域名或地址 为此服务器定义。
当我从网络服务中调用它时,我不明白为什么它不会出现问题。
答案 0 :(得分:3)
错误消息表示您的邮件服务器需要身份验证。虽然有很多方法可以实现这一点,但您可以创建一个新的NetworkCredential
对象并将其提供给您的mailmessage命名参数:
public static void SendEmailWebService(string asunto, string body, string to)
{
try
{ // takes config from web.config
MailMessage mm = new MailMessage
{
From = new MailAddress(@"no-reply@site.com", @"Notificacion"),
To = { new MailAddress(to) },
Subject = asunto,
IsBodyHtml = true,
Body = body,
HeadersEncoding = System.Text.Encoding.UTF8,
SubjectEncoding = System.Text.Encoding.UTF8,
BodyEncoding = System.Text.Encoding.UTF8,
UseDefaultCredentials = false,
Credentials = new NetworkCredential("username", "password")
};
Smtp.Send(mm);
}
catch (Exception ex)
{
// Error
}
}
如果您不想将NetworkCredential
添加到源代码中,也可以从web.config文件中配置它
<system.net>
<mailSettings>
<smtp>
<network host="" port="" userName="" password=""/>
</smtp>
</mailSettings>
</system.net>