11

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

我尝试了几种方法,但是仍然弹出相同的异常: System.Net.Mail.Smtp Exception - Connection has timed out。

这是我在我的 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);
}

我错过了什么或做错了什么?我读到这是在堆栈溢出的其他一些问题中执行此操作的好方法,所以我真的不知道这里有什么问题。

谢谢你的帮助 :)

4

5 回答 5

6

您需要告诉 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);
于 2013-03-21T18:39:55.330 回答
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");
于 2013-03-21T18:42:25.683 回答
3

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

我在“电子邮件确认”、“密码恢复”和“发送电子邮件”方面遇到了问题,现在所有 3 个问题都已解决 :)。

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

谢谢大家的帮助。

于 2014-03-28T08:00:50.543 回答
1

正如我已经在这里回答的那样。

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

正确的端口是 587,但要进行身份验证,您需要允许来自您 gmail 帐户中安全性较低的应用程序的访问。在这里试试

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

于 2016-03-21T18:14:48.400 回答
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);
于 2016-12-15T13:05:45.873 回答