c# - 不用gmail发送邮件

标签 c# email com gmail

似乎很多解决方案都涉及使用服务器: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,如果您对我的代码有任何意见,我很乐意听到,谢谢)

关于c# - 不用gmail发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6742326/

相关文章:

c# - 指定的转换在 C# 和 MySQL 中无效

c# - ASP.NET Core 通过 web.config 授权 AD 组

c# - Windows Phone 8,应用程序设置未保留

java - 如何使用我的 outlook 帐户发送电子邮件?

c# - 在 C# 中使用 Scripting.Dictionary

c# - 使用 .resx 文件本地化 Prism 4 模块

html - 如何使用 SMTP 发送正文带有图像的电子邮件?

email - 如何让 Plesk 11 服务器接受带有分隔符 (VERP) 的地址的电子邮件?

.net - .NET Core 中是否有 System.Runtime.InteropServices.Marshal.GetActiveObject() 的替代品?

c# - 即使文件位于 Bin 文件夹中,DLLImport 也不起作用