从gmail SMTP C#连接超时发送邮件

时间:2013-03-21 18:31:47

标签: c# web-config smtp gmail

我一直在尝试通过C#从gmail帐户发送电子邮件,以便为我的网站注册帐户。

我尝试了几种方法,但是同样的异常会继续弹出:System.Net.Mail.Smtp Exception - Connection已经超时。

这是我在Web.config文件中包含的内容:

<system.net>
    <mailSettings>
        <smtp deliveryMethod="Network" 
              from="Writely &lt;mrbk.writely@gmail.com&gt;">
            <network host="smtp.gmail.com" 
                     port="465" 
                     enableSsl="true" 
                     defaultCredentials="false" 
                     userName="mrbk.writely@gmail.com" 
                     password="******" />
        </smtp>
    </mailSettings>
</system.net>

其中,writely是我网站的名称,mrbk.writely @ gmail.com是我希望发送电子邮件的帐户。

然后在我的帐户控制器中,当我连接数据库并将用户保存在我的表中时,我正在创建我的MailMessage对象并尝试通过以下方式查找邮件:

using (DBConnection conn = new DBConnection())
{
       conn.UserInfoes.Add(userInfo);
       conn.SaveChanges();

       MailMessage mail = new MailMessage();
       mail.From = new MailAddress("mrbk.writely@gmail.com");
       mail.To.Add("bernice.zerafa11@gmail.com");
       mail.Subject = "Welcome to Writely";
       mail.Body = "Test content";

       SmtpClient smtp = new SmtpClient();
       smtp.Send(mail);
}

我错过了什么或做错了什么?我读到这是在堆栈溢出的其他问题上做这个的好方法所以我真的不知道这里有什么问题。

感谢您的帮助:)

5 个答案:

答案 0 :(得分:7)

您需要告诉SmtpClient要使用的设置。它不会自动从Web.Config文件中读取此信息。

SmtpClient smtp = new SmtpClient("smtp.gmail.com", 465);
smtp.Credentials = new NetworkCredential("mrbk.writely@gmail.com", "***");
smtp.EnableSsl = true;
smtp.Send(mail);

答案 1 :(得分:4)

gmail需要身份验证:

Outgoing Mail (SMTP) Server
requires TLS or SSL: smtp.gmail.com (use authentication)
Use Authentication: Yes
Port for TLS/STARTTLS: 587
Port for SSL: 465

所以我做的是

var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential("mrbk.writely@gmail.com", "mypwd"),
            EnableSsl = true
        };
        client.Send("bernice.zerafa11@gmail.com", "bernice.zerafa11@gmail.com", "Welcome to Writely", "Test content");

答案 2 :(得分:3)

我遇到了完全相同的问题,将端口号从465切换到587后解决了。

我遇到了问题&#34;电子邮件确认&#34;,&#34;密码恢复&#34;和&#34;发送电子邮件&#34;现在所有3个问题都解决了:)。

我知道这是一篇相当古老的帖子,但我通常使用现有的帖子来寻找答案,而不是寻求新的问题。

感谢大家的帮助。

答案 3 :(得分:1)

我已经回答here

此问题也可能是由您的Gmail帐户中的安全配置引起的。

正确的端口是587,但要进行身份验证,您需要允许从您的Gmail帐户中安全性较低的应用程序进行访问。 试一试here

它对我有用,希望它有帮助..

答案 4 :(得分:0)

asp.net web forms / sharepoint中的示例

StringBuilder Body = new StringBuilder();
Body.Append("Your text");

String FromEmail = "you email";
String DisplayNameFromEmailMedico = "display when you receive email";
MailMessage message = new MailMessage();
message.From = new MailAddress(FromEmail, DisplayNameFromEmailMedico);
message.To.Add(new MailAddress("myclient@gmail.com"));
message.Subject = "subject that print in email";
message.IsBodyHtml = true;
message.Body = Body.ToString();
SmtpClient client = new SmtpClient();

NetworkCredential myCreds = new NetworkCredential("yoursmtpemail@gmail.com", "key from email smtp", "");
client.EnableSsl = true;
client.Credentials = myCreds;
client.Send(message);