【问题标题】:How Can i Send Mail Through Exchange Server by using SMTP如何使用 SMTP 通过 Exchange Server 发送邮件
【发布时间】:2012-07-10 16:02:20
【问题描述】:

我想在没有

的情况下运行下面的代码
NetworkCredential nc = new Net.NetworkCredential("USERNAME", "PASSWORD"). 

仅使用 Exchange 主机(服务器名称)和端口

此代码出现错误:邮箱不可用。服务器响应为:5.7.1 客户端无权作为此发件人发送

protected void SendEmail(object sender, EventArgs e)
{
    SmtpClient smtpClient = new SmtpClient("ExchangeServerName",25);
    MailMessage message = new MailMessage();
    try
    {
        MailAddress fromAddress = new MailAddress("bala@OfficeName.com", "From Me");
        MailAddress toAddress = new MailAddress("bala@OfficeName.com", "To You");
        message.From = fromAddress;
        message.To.Add(toAddress);
        message.Subject = "Testing!";
        message.Body = "This is the body of a sample message";
        smtpClient.UseDefaultCredentials = true;
        System.Net.NetworkCredential nc = CredentialCache.DefaultNetworkCredentials;
        smtpClient.Credentials = (System.Net.ICredentialsByHost)nc.GetCredential("ExchangeServerName", 25, "Basic");
        smtpClient.Send(message);
        lblText.Text ="Email sent.";
    }
    catch (Exception ex)
    {
        lblText.Text = "Coudn't send the message!\n  " + ex.Message;
    }
}

【问题讨论】:

    标签: asp.net exchange-server smtpclient


    【解决方案1】:

    我已经做到了。有关我的代码的更多详细信息,请使用this link

    下面的代码可以正常工作

    服务器:Windows Server 2003、Windows Server 2008、Windows Server 2008 R2

    IIS:6.0、7.0

    .Net Frame Wotk : 2.0,3.5,4.0

    string sMessage;
    SmtpClient smtpClient = new SmtpClient();
    MailMessage message = new MailMessage();
    try
    {
    
     //you can provide invalid from address. but to address Should be valil
    MailAddress fromAddress = new MailAddress("bala@technospine.com", "BALA");
    
    smtpClient.Host = "Exchange Server Name";
    smtpClient.Port = 25;
    //smtpClient.Port = 587;
    
    
    smtpClient.UseDefaultCredentials = true; 
    
    message.From = fromAddress;
    message.To.Add(bala@technospine.com); //Recipent email 
    message.Subject = _subject;
    message.Body = _details;
    message.IsBodyHtml = true;
    
    //smtpClient.EnableSsl = true; 
    
    smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
    
    smtpClient.Send(message); 
    
    sMessage = "Email sent.";
    }
    catch (Exception ex)
    {
    sMessage = "Coudn't send the message!\n " + ex.Message;
    }
    
    
    lblMailStatus.Text = sMessage;
    

    【讨论】:

      【解决方案2】:

      您正在尝试使用 Exchange 发送邮件。为此,发件人(或发送进程)必须对其登录的帐户具有权限,才能代表您指定为发件人的用户进行发送。这与通过 Exchange 的 SMTP 邮件传输代理 (MTA) 以使 Exchange 接收和路由电子邮件不同。因此,您知道应该使用 SMTP 执行此操作是正确的,但您只是尝试使用错误的 API 来完成此操作。您想查看 CDOSYS 以通过 SMTP MTA 发送它,而无需进行用户身份验证。在 System.Web.Mail.MailMessage 上搜索更具体的示例 - 那里有很多。如果 Exchange 服务器似乎不接受/传递以这种方式传递给它的 SMTP 消息,您可能只需要稍微打开它的配置。在这种情况下,Exchange 服务器可能对通过其 SMTP MTA 接收的邮件的路由进行了严格的安全配置,并且只需要配置发送这些邮件的机器的 IP 地址以允许邮件转发。

      【讨论】:

        【解决方案3】:

        尝试 NetworkCredential nc = new Net.NetworkCredential("USERNAME", "PASSWORD","DOMAIN")

        【讨论】:

          猜你喜欢
          • 2011-12-28
          • 2012-05-07
          • 2020-01-06
          • 2011-04-24
          • 2017-12-18
          • 2016-01-18
          • 2011-09-08
          • 2013-11-12
          相关资源
          最近更新 更多