通过C#通过Google Apps帐户发送电子邮件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过C#通过Google Apps帐户发送电子邮件相关的知识,希望对你有一定的参考价值。

我有一个标准的Google Apps帐户。我已通过Google Apps设置了自定义域名。当我使用Gmail界面时,我可以通过Google Apps成功发送和接收电子邮件。但是,我想通过代码发送电子邮件。为了尝试这个,我一直在尝试以下代码:

MailMessage mailMessage = new MailMessage();
mailMessage.To.Add("someone@somewhere.com");
mailMessage.Subject = "Test";
mailMessage.Body = "<html><body>This is a test</body></html>";
mailMessage.IsBodyHtml = true;

// Create the credentials to login to the gmail account associated with my custom domain
string sendEmailsFrom = "emailAddress@mydomain.com";             
string sendEmailsFromPassword = "password";
NetworkCredential cred = new NetworkCredential(sendEmailsFrom, sendEmailsFromPassword);

SmtpClient mailClient = new SmtpClient("smtp.gmail.com", 587);
mailClient.EnableSsl = true;
mailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
mailClient.UseDefaultCredentials = false;
mailClient.Timeout = 20000;
mailClient.Credentials = cred;
mailClient.Send(mailMessage); 

到达Send方法时,抛出异常,指出:

“SMTP服务器需要安全连接或客户端未经过身份验证。服务器响应为:5.5.1需要身份验证。”

如何通过Google通过自定义域发送电子邮件?

谢谢!

答案

无需对代码中的所有smtp设置进行硬编码。把它们放在web.config中。这样,您可以根据需要加密这些设置,并在不重新编译应用程序的情况下即时更改它们。

<configuration>
  <system.net>
    <mailSettings>
      <smtp from="example@domain.com" deliveryMethod="Network">
          <network host="smtp.gmail.com" port="587"
              userName="example@domain.com" password="password"/>
      </smtp>
    </mailSettings>
  </system.net>
</configuration>

发送电子邮件时结束只需在SmtpClient上启用SSL:

var message = new MailMessage("navin@php.net");
// here is an important part:
message.From = new MailAddress("example@domain.com", "Mailer");
// it's superfluous part here since from address is defined in .config file
// in my example. But since you don't use .config file, you will need it.

var client = new SmtpClient();
client.EnableSsl = true;
client.Send(message);

确保您从与Gmail尝试进行身份验证的电子邮件地址发送电子邮件。

注意:从.NET 4.0开始,您可以将enableSsl =“true”插入到web.config中,而不是在代码中设置它。

另一答案

这就是我在WPF 4中使用的内容

SmtpClient client = new SmtpClient();
client.Credentials = new NetworkCredential("sender_email@domain.tld", "P@$$w0rD");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;

try {
    MailAddress
        maFrom = new MailAddress("sender_email@domain.tld", "Sender's Name", Encoding.UTF8),
        maTo = new MailAddress("recipient_email@domain2.tld", "Recipient's Name", Encoding.UTF8);
    MailMessage mmsg = new MailMessage(maFrom.Address, maTo.Address);
    mmsg.Body = "<html><body><h1>Some HTML Text for Test as BODY</h1></body></html>";
    mmsg.BodyEncoding = Encoding.UTF8;
    mmsg.IsBodyHtml = true;
    mmsg.Subject = "Some Other Text as Subject";
    mmsg.SubjectEncoding = Encoding.UTF8;

    client.Send(mmsg);
    MessageBox.Show("Done");
} catch (Exception ex) {
    MessageBox.Show(ex.ToString(), ex.Message);
    //throw;
}

注意防火墙和反病毒。这些令人毛骨悚然的东西往往会阻止发送电子邮我使用McAfee Enterprise,我必须添加可执行文件名(如Bazar.exe和Bazar.vshost.exe的Bazar。*)才能发送电子邮件...

另一答案

将端口更改为465

另一答案

没有必要做任何事情。只需首次登录您当前的帐户并按照说明操作即可。

你的问题会解决。之所以出现这种情况,是因为您在Google应用中创建了该帐户但未登录。只需登录并按照说明进行操作即可。

另一答案

我的代码在Port = 587上使用TLS连接到smtp.google.com(SSL应该是端口465),但仍然需要EnableSsl = true

SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.Port = 587;
smtp.EnableSsl = true;
smtp.UseDefaultCredentials = false;
NetworkCredential credentials = new NetworkCredential();
credentials.UserName = "INSERT EMAIL";
credentials.Password = "INSERT PASSWORD";
smtp.Credentials = credentials;

MailAddress addressFrom = new MailAddress(credentials.UserName);
MailAddress addressTo = new MailAddress("INSERT RECIPIENT");
MailMessage msg = new MailMessage(addressFrom, addressTo);
msg.Subject = "SUBJECT"
msg.Body = "BODY";

smtp.Send(msg);

请注意您的G SUITE帐户中的这些重要先决条件

以上是关于通过C#通过Google Apps帐户发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

使用 nodejs 中的服务帐户域范围委派通过 Google Apps Gmail 发送邮件

通过Google Apps向Django发送电子邮件时,为电子邮件帐户指定名称

typescript 创建Google Apps文件并通过电子邮件发送给某人

如何通过组帐户使用 Google Script 发送电子邮件

允许匿名访问 Google Apps Script Web 应用程序(Google Apps 帐户)

无法通过Google Apps脚本显示授权对话框