【问题标题】:Asp.net SMTP Gmail FailedAsp.net SMTP Gmail 失败
【发布时间】:2019-01-20 22:00:33
【问题描述】:

在写我重复问题的评论之前,我想说我已经阅读并尝试了所有可能的方法。

我正在尝试通过 gmail smtp 发送电子邮件。我使用 ASP.NET WebForm,也尝试使用 .net 4.0 在服务器上部署网站。

我的 Gmail 帐户已通过启用:POP、IMAP 协议进行配置。还打开了不太安全的应用程序,并且禁用了两因素身份验证。

这是我发送电子邮件的代码:

try
{
    SmtpClient smtp = new SmtpClient("smtp.gmail.com", 465);
    smtp.EnableSsl = true;
    smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
    smtp.UseDefaultCredentials = false;
    smtp.Credentials = new NetworkCredential("email", "password");
    MailMessage masage = new MailMessage();
    masage.To.Add("email");
    masage.From = new MailAddress("email");
    masage.Subject = "subject";
    masage.Body = "Hello";
    smtp.Send(masage);
}
catch (Exception eX)
{
    throw new Exception("cDocument: Error occurred trying to Create an Email" + Environment.NewLine + eX.Message);
} 

所以问题是,当我尝试发送电子邮件时,我遇到了错误

发送邮件失败。

请帮我弄清楚,可能是什么问题。

更新: 我尝试使用所有端口 465 和 587。 按摩仅在按下发送按钮后出现。 我使用 System.Net.Mail;

为什么这个问题是独一无二的: 因为我尝试使用所有端口并且我拥有所有发送权限,但仍然出现错误。

这里是发送按钮的代码:

public void btn_submit_Click(object sender, EventArgs e)
    {
        //comment
        string comment = id_comment.Text.Replace("'", "\"");

        //comment end
        bool check = id_check_terms.Checked;
        string Username = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();
        string Username_new = Username.Replace("APAC\\", "");
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        con.Open();
        //username
        var Fullname = "Select FirstName From UserData where (Employee='"+Username_new+"')";
        SqlCommand Fullname_command = new SqlCommand(Fullname, con);
        object Fullname_object = Fullname_command.ExecuteScalar();
        string Fullname_converted = Convert.ToString(Fullname_object);
        //usernitemame
        var items = "Select item From Basket where (Username='" + Username_new + "')";
        SqlCommand items_command = new SqlCommand(items, con);
        object items_object = items_command.ExecuteScalar();
        string items_converted = Convert.ToString(items_object);
        List<String> columnData = new List<String>();
        List<String> emaildata = new List<String>();
        List<String> emaildatacc = new List<String>();

        using (con)
        {
            //email primary
            string email = "Select Email From MBAccessoriesEmail where TOorCC='1'";
            using (SqlCommand command = new SqlCommand(email, con))
            {
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        emaildata.Add(reader.GetString(0));
                    }
                }
            }
            string email_primary = string.Join(", ", emaildata);
            //endemail
            //email cc
            string emailcc = "Select Email From MBAccessoriesEmail where TOorCC='2'";
            using (SqlCommand command = new SqlCommand(emailcc, con))
            {
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        emaildatacc.Add(reader.GetString(0));
                    }
                }
            }
            string email_cc = string.Join("; ", emaildatacc);
            //endemail


            this.GridView1.Columns[6].Visible = false;
            if (check == true)
            {
                if (GridView1.Rows.Count == 0)
                {
                    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "<script>alert('You dont have anything in your basket.');</script>", false);
                }else
                {

                    try {
                        MailMessage mail = new MailMessage();
                        mail.To.Add("email");
                        mail.From = new MailAddress("email");
                        mail.Subject = "subject";
                        mail.Body = "Hello";
                        mail.IsBodyHtml = true;
                        SmtpClient smtp = new SmtpClient();
                        smtp.Host = "smtp.gmail.com";
                        smtp.Port = 587;
                        smtp.Credentials = new System.Net.NetworkCredential("email", "password");
                        smtp.EnableSsl = true;
                        smtp.Send(mail);
                        }
                    catch (Exception eX)
                    {
                        throw new Exception("cDocument: Error occurred trying to Create an Email" + Environment.NewLine + eX.Message);
                    }

                    cmd.CommandText = "Delete Basket where Username='" + Username_new + "'";
                    cmd.ExecuteNonQuery();

                    con.Close();

                    Response.Redirect("ShoppingCart.aspx");
                }
            }
        }

    }

【问题讨论】:

  • 该消息是在执行SmtpClient.Send() 方法之前还是之后出现的?如果存在,您可以提供堆栈跟踪吗?检查here 是否有可能的 SMTP 端口。
  • smtp.gmail.com 使用端口 587。
  • @TetsuyaYamamoto Massage 恰好在我调用发送方法时出现。
  • @AlexKudryashev 我已经尝试过了,但仍然没有。

标签: c# asp.net email smtp gmail


【解决方案1】:

我想把它放在 cmets 中,但它有点长。我多年来一直使用smpt.gmail.com 并没有遇到这样的问题。唯一的区别是我使用将邮件设置放置到web.configapp.config

  <system.net>
    <mailSettings>
      <smtp deliveryMethod="Network">
        <network defaultCredentials="false" host="smtp.gmail.com" password="MYPASSWORD" port="587" userName="MYACCOUNTEMAIL"/>
      </smtp>
    </mailSettings>
</system.net>

然后像这样发送电子邮件

var cli = new System.Net.Mail.SmtpClient();
cli.EnableSsl = true; //for some reason .config settings don't work here
//no more cli settings
var msg = new System.Net.Mail.MailMessage();
// do all other things
//finally
cli.Send(msg);

它对我有用。

【讨论】:

    【解决方案2】:

    试试这个。我已经更新了我的,似乎工作正常。 还要确保您的“字符串”与发送中声明的顺序相同。

    public string send(string gmailid, string password, string toemail, string subject, string body)
        {
            string msg = null;
            MailMessage mail = new MailMessage();
            mail.To.Add(toemail);
            mail.From = new MailAddress(gmailid);
            mail.Subject = subject;
            mail.Body = body;
            mail.IsBodyHtml = true;
            SmtpClient smtp = new SmtpClient();
            smtp.Host = "smtp.gmail.com";
            smtp.Port = 587;
            smtp.Credentials = new System.Net.NetworkCredential
                        (gmailid, password);
            smtp.EnableSsl = true;
            try
            {
                smtp.Send(mail);
                msg = "Your Message has been sent!";
            }
            catch (Exception)
            {
                msg = "Your Message could NOT be sent.";
            }
            return msg;
        }
    

    【讨论】:

    • 您在发送操作中执行的操作导致它失败。
    • 我刚刚更新了它。我有旧版本而不是新版本没有“附件”
    • 谢谢,但对我没有帮助:(
    • 不客气。让它工作。您是否正在创建一个 DLL 并将其用作参考?
    • 我使用 System.Net.Mail 作为参考
    【解决方案3】:

    Google 提供高安全性验证,以避免从您需要授予该 Google 帐户权限的其他设备发送电子邮件。

    从您之前用于访问您的 Google 帐户的其他设备转到 https://g.co/allowaccess,然后按照说明进行操作。

    【讨论】:

    • 很遗憾没有帮助,
    猜你喜欢
    • 2020-09-24
    • 2017-10-26
    • 2014-07-21
    • 1970-01-01
    • 2020-12-29
    • 2011-05-05
    • 2021-04-01
    • 2020-05-15
    • 2019-03-14
    相关资源
    最近更新 更多