Skip to main content
 首页 » 编程设计

c#之不用gmail发送邮件

2024年01月11日30JeffreyZhao

似乎很多解决方案都涉及使用服务器:smtp.gmail.com 和 System.Net.Mail.SmtpClient。

其他人建议使用 System.Web.Mail(许多人表示已弃用): here for example.

无论如何,当我尝试时,我无法使上述任何一个示例正常工作。我不认为这是一个防火墙问题。我可以使用 outlook express 通过 gmail 发送电子邮件。我得到的 C# 错误是目标机器主动拒绝连接。

我应该尝试从代码中使用 outlook 吗?最好的方法是通过 AutoIt 还是通过某些 dll/com?为什么首先需要服务器?在 C# 中,我可以从网上下载东西,为什么我不能直接从 C# 发送特定格式的网络包(电子邮件),而不必使用某种服务器?

请您参考如下方法:

您需要 smtp 中继或网关。我用 http://sendgrid.com/从云端发送电子邮件,他们有一个免费选项。

还有关于如何发送电子邮件的示例代码,我重构了他们的代码以便我可以从其他地方调用它。

public partial class Email 
{ 
/// <summary> 
/// Generic Email method used to send email through SendGrid 
/// </summary> 
/// <param name="ToAddressName">ToAddress, DisplayName</param> 
/// <param name="FromAddress">Email address of sender</param> 
/// <param name="FromName">Display Name of sender</param> 
/// <param name="SendCopy">Send BCC to FromAddress</param> 
public void SendEmail(Dictionary<string, string> toAddressName, 
                      String fromAddress, String fromName, 
                      String subject, String message, 
                      bool sendCopy) 
{ 
  try 
  { 
    MailMessage mailMsg = new MailMessage(); 
 
    // To 
    foreach (KeyValuePair<string, string> kvp in toAddressName) 
    { 
      string toAddress = kvp.Key; 
      string displayName = kvp.Value; 
      mailMsg.To.Add(new MailAddress(toAddress, displayName)); 
    } 
 
    // From 
    mailMsg.From = new MailAddress(fromAddress, fromName); 
 
    if (sendCopy) 
    { 
      mailMsg.Bcc.Add(new MailAddress(fromAddress, fromName)); 
    } 
 
    // Subject and multipart/alternative Body 
    mailMsg.Subject = subject; 
 
    string html = message; 
    mailMsg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(html, null, MediaTypeNames.Text.Html)); 
 
    // Init SmtpClient and send 
    SmtpClient smtpClient = new SmtpClient("smtp.sendgrid.net", Convert.ToInt32(587)); 
 
    System.Net.NetworkCredential credentials = new System.Net.NetworkCredential("sendgridusername", "sendgridpassword"); 
    smtpClient.Credentials = credentials; 
 
    smtpClient.Send(mailMsg); 
  } 
  catch (Exception ex) 
  { 
    Error error = new Error(); 
    error.ReportError(ex); 
  } 
} 

(ps,如果您对我的代码有任何意见,我很乐意听到,谢谢)