使用MailMessage在C#中发送电子邮件

5

我在使用MailMessage发送邮件时遇到了一些问题。我有两个电子邮件账户(account1@gmail.com和account2@gmail.com),我想让account2在按钮单击事件中向account1发送一封电子邮件。

以下是我的代码,但它不起作用。我收到一个异常,说这是被禁止的。

            try
            {
                //do submit
                MailMessage emailMessage = new MailMessage();
                emailMessage.From = new MailAddress("account2@gmail.com", "Account2");
                emailMessage.To.Add(new MailAddress("account1@gmail.com", "Account1"));
                emailMessage.Subject = "SUBJECT";
                emailMessage.Body = "BODY";
                emailMessage.Priority = MailPriority.Normal;
                SmtpClient MailClient = new SmtpClient("smtp.gmail.com");
                MailClient.Credentials = new System.Net.NetworkCredential("account2@gmail.com", "password");
                MailClient.Send(emailMessage);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

我感觉这可能是 Smtp 的问题,但我毫无头绪。

请查看此链接:http://www.aspdotnet-suresh.com/2010/12/how-to-send-mail-using-gmail.html - Janki
2
尝试添加端口号:SmtpClient MailClient = new SmtpClient("smtp.gmail.com",587); - Vishal Suthar
你是否已经在应用程序配置文件的邮件设置部分内配置了 Smtp 设置部分? - Vinay Pratap Singh Bhadauria
1
作为附注:请将您的 MailMessageSmtpClient 包装在 using 语句 中,以正确处理非托管资源的释放。 - rexcfnghk
5个回答

10

试一试:

using (MailMessage emailMessage = new MailMessage())
{
    emailMessage.From = new MailAddress("account2@gmail.com", "Account2");
    emailMessage.To.Add(new MailAddress("account1@gmail.com", "Account1"));
    emailMessage.Subject = "SUBJECT";
    emailMessage.Body = "BODY";
    emailMessage.Priority = MailPriority.Normal;
    using (SmtpClient MailClient = new SmtpClient("smtp.gmail.com", 587))
    {
        MailClient.EnableSsl = true;
        MailClient.Credentials = new System.Net.NetworkCredential("account2@gmail.com", "password");
        MailClient.Send(emailMessage);
    }                               
} 

我向SMTP客户端添加了端口并启用了SSL。 如果端口587无法使用,请尝试端口465。


2

尝试:

MailMessage Msg = new MailMessage();

Msg.From = new MailAddress(txtUsername.Text);

Msg.To.Add(txtTo.Text);

Msg.Subject = txtSubject.Text;

Msg.Body = txtBody.Text;

SmtpClient smtp = new SmtpClient();

smtp.Host = "smtp.gmail.com";

smtp.Port = 587;

smtp.Credentials=new System.Net.NetworkCredential(txtUsername.Text,txtpwd.Text);

smtp.EnableSsl = true;

smtp.Send(Msg);

1
尝试添加端口号 587 并启用 SSL on,因为 Gmail 使用“严格”的 SSL 安全性。这意味着我们将始终强制执行您的其他提供商的远程服务器具有有效的 SSL 证书。
    try
    {
        //do submit
        MailMessage emailMessage = new MailMessage();
        emailMessage.From = new MailAddress("account2@gmail.com", "Account2");
        emailMessage.To.Add(new MailAddress("account1@gmail.com", "Account1"));
        emailMessage.Subject = "SUBJECT";
        emailMessage.Body = "BODY";
        emailMessage.Priority = MailPriority.Normal;
        SmtpClient MailClient = new SmtpClient("smtp.gmail.com", 587);
        MailClient.Credentials = new System.Net.NetworkCredential("account2@gmail.com", "password");
        MailClient.EnableSsl = true;
        MailClient.Send(emailMessage);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }

1
您还没有定义端口号。应该是587。并使用以下方式enableSsl=true

SmtpClient MailClient = new SmtpClient("smtp.gmail.com",587);

0
MailMessage objMail = new MailMessage();
SmtpClient objSMTP = new SmtpClient("from.google.uk");
MailAddress objTo = new MailAddress("e-mail", "name");

string sql = "Select Naam, Mail from tblMail";

OleDbCommand cmdMail = new OleDbCommand(sql, cnnConnectie);

OleDbDataReader dtrMail = default(OleDbDataReader);

cnnConnectie.Open();
dtrMail = cmdMail.ExecuteReader();

while (dtrMail.Read())
{
    objMail.To.Add(dtrMail["Mail"].ToString());

    objMail.From = objTo;
    objMail.Body = "test";
    objMail.Subject = dtrMail["name"].ToString();
    objSMTP.Send(objMail);
}
cnnConnectie.Close();

谢谢您的回复。您能否为您的答案添加澄清说明? - Slam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接