如何使用 GMail 的 SMTP 服务器从 ASP.NET 站点发送电子邮件? [复制]
Posted
技术标签:
【中文标题】如何使用 GMail 的 SMTP 服务器从 ASP.NET 站点发送电子邮件? [复制]【英文标题】:How sent e-mail from ASP.NET site using GMail's SMTP server? [duplicate] 【发布时间】:2011-07-18 20:12:21 【问题描述】:可能重复:Sending email through Gmail SMTP server with C#
我希望我的 ASP.NET MVC 应用程序向网站用户发送一些标准信件。出于测试目的,我没有本地 SMTP 服务器,而且我的提供商也没有我所知道的。所以我必须使用像 GMail 的 SMTP 这样的公共服务。
如何使用smtp.gmail.com
和我的GMail 帐户发送电子邮件?如果我的电子邮件是 drastomail@gmail.com
并且我的密码是 password
,我到底应该把什么放到 Web.config
和 whot 上?
谢谢
编辑
当我尝试以下演示程序时:
class Program
static void Main(string[] args)
var client = new SmtpClient("smtp.gmail.com", 587)
Credentials = new NetworkCredential("puzzlehunters@gmail.com", "puzzlehunters111"),
EnableSsl = true
;
client.Send("puzzlehunters@gmail.com", "puzzlehunters@gmail.com", "test", "testbody");
Console.WriteLine("Sent");
Console.ReadLine();
异常失败。大多数内部异常都带有此消息:
No connection could be made because the target machine actively refused it 209.85.227.109:587
任何所有当前答案(最早 3 个)也给了我同样的例外。我能用它做什么?
【问题讨论】:
我很确定 smtp 服务器必须驻留在您的应用程序所在的服务器上。虽然我想有人有一个 API 可以将消息发送到,它会从那里发送消息。 @Nick 一点也不。 SMTP 中继可以在任何地方。现在,大多数服务器管理员会将中继限制为本地应用程序,但这是一项配置设置,并不是硬性要求。 @Wyatt Barnett,很高兴知道这一点。 请查看我对问题的编辑。 @p.campbell 在我编辑后不再存在。那里提出的解决方案对我来说会引发异常。 【参考方案1】:这可能是防火墙问题。运行您的代码的服务器上的防火墙可能会阻止 TCP 端口 587 上的流量。也可能是在您的服务器和 Internet 之间的网络基础设施中被阻止。
【讨论】:
【参考方案2】:这是我过去使用过的一个类:
namespace MyApp
public class GMailer
public static string GmailUsername get; set;
public static string GmailPassword get; set;
public static string GmailHost get; set;
public static int GmailPort get; set;
public static bool GmailSSL get; set;
public string ToEmail get; set;
public string Subject get; set;
public string Body get; set;
public bool Ishtml get; set;
static GMailer()
GmailHost = "smtp.gmail.com";
GmailPort = 25; // Gmail can use ports 25, 465 & 587; but must be 25 for medium trust environment.
GmailSSL = true;
public void Send()
SmtpClient smtp = new SmtpClient();
smtp.Host = GmailHost;
smtp.Port = GmailPort;
smtp.EnableSsl = GmailSSL;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential(GmailUsername, GmailPassword);
using (var message = new MailMessage(GmailUsername, ToEmail))
message.Subject = Subject;
message.Body = Body;
message.IsBodyHtml = IsHtml;
smtp.Send(message);
这个类需要在你的Application_Start事件中配置:
GMailer.GmailUsername = "you@gmail.com";
GMailer.GmailPassword = "password";
用法:
GMailer mailer = new GMailer();
mailer.ToEmail = "someone@somewhere.com";
mailer.Subject = "Email Subject Line";
mailer.Body = "This is a test message";
mailer.IsHtml = false;
mailer.Send();
【讨论】:
请查看我对原始问题的编辑 在尝试您的代码时会引发完全相同的异常。 这很奇怪。只需将此代码复制并粘贴到 LINQPad 中,它就可以毫无问题地发送邮件。您是否尝试过使用其他端口? (我认为,25、465 和 587 都支持)。【参考方案3】:使用如下简单的实用程序类:
using System.IO;
using System.Net.Mail;
using System.Text;
using System.Net;
public sealed class Emailer
private Emailer()
public static void SendMail(string subject, string to,
string from = null, string body = null, Stream attachment = null,
int port = 25, string host = "localhost", bool isBodyHtml = true)
MailMessage mailMsg = new MailMessage();
mailMsg.From = new MailAddress(from);
mailMsg.To.Add(to);
mailMsg.Subject = subject;
mailMsg.IsBodyHtml = isBodyHtml;
mailMsg.BodyEncoding = Encoding.UTF8;
mailMsg.Body = body;
mailMsg.Priority = MailPriority.Normal;
//Message attahment
if (attachment != null)
mailMsg.Attachments.Add(new Attachment(attachment, "my.text"));
// Smtp configuration
SmtpClient client = new SmtpClient();
client.Credentials = new NetworkCredential("YOUR_GMAIL_USER_NAME", "PASSWORD");
client.UseDefaultCredentials = true;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Port = port; //use 465 or 587 for gmail
client.Host = host;//for gmail "smtp.gmail.com";
client.EnableSsl = false;
MailMessage message = mailMsg;
client.Send(message);
【讨论】:
请查看我对原始问题的修改。以上是关于如何使用 GMail 的 SMTP 服务器从 ASP.NET 站点发送电子邮件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
CakePHP-2.0:如何使用 CakEmail 和 SMTP 设置从 gmail 帐户发送电子邮件?
无法使用 codeIgniter 从 gmail smtp 服务器发送电子邮件?