c# - Asp.net SMTP Gmail 失败
问题描述
在写评论说我在重复问题之前,我想说我已经阅读并尝试了所有可能的事情。
我正在尝试通过 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");
}
}
}
}
解决方案
谷歌提供了高安全性验证,以避免从其他设备发送电子邮件,您需要授予该谷歌帐户的权限。
从您之前用于访问您的 Google 帐户的其他设备转到https://g.co/allowaccess ,然后按照说明进行操作。
推荐阅读
- windows - 如何在不重命名的情况下克隆 Visual Studio 2019 解决方案,Windows 10
- docker - 在 Minikube 上运行映像时应用特定的部署文件
- android - 这是关于来自outlook-email 的Android Applinks / Deeplinks 问题
- python - 由于 requirements.txt 中的问题,Heroku 中的部署失败
- javascript - 如何避免 Promise 中的重复捕获功能
- c# - C# - 尝试从函数构造一个类,得到无法转换方法组错误
- python - discord.py 如何设置一个只有管理员才能使用的 kick 命令?
- php - 上传到团队云端硬盘的权限问题
- php - 使用PHP按ID将数组拆分为相等的部分
- mysql - 撤销对 MySQL 中众多数据库之一的访问权限