【问题标题】:Send email from webservice从网络服务发送电子邮件
【发布时间】:2014-02-19 19:37:52
【问题描述】:

我有一个从 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
    }
}

如果我正常调用此方法,它可以工作,但如果我从 Web 服务调用它,则它会失败。

在cathc中,例外是:

此邮件服务器在尝试发送到 非本地电子邮件地址。请检查您的邮件客户端设置或 请与您的管理员联系以验证域或地址是 为此服务器定义。

当我从网络服务调用它时,我不明白为什么它不起作用。

【问题讨论】:

标签: c# web-services email sendmail


【解决方案1】:

错误消息是说您的邮件服务器需要身份验证。虽然有很多方法可以实现这一点,但您可以创建一个新的 NetworkCredential 对象并将其提供给您的邮件消息命名参数:

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> 

【讨论】:

  • 正确。无论您使用的是 Web 服务还是 winforms 应用程序都没有关系 - 一切都与电子邮件服务的托管方式以及身份验证所需的内容有关。
  • 你说得对,我在 webconfig 中有设置,但是由于某种原因它停止工作,我认为它不适用于 web 服务,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
  • 2014-02-06
  • 1970-01-01
相关资源
最近更新 更多