部署到主机后,使用 Gmail 通过 C# 发送邮件不起作用
Sending mail through C# with gmail is not working after deploying to host
我正在尝试通过 Gmail 发送邮件。当我在 localhost 上测试时,我发送邮件成功,但是当我将它上传到 web 主机时,这不起作用。我看到了这种类型的错误:
Request for the permission of type System.Net.Mail.SmtpPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 failed.
每当我使用端口 25 时,都会收到以下此类错误:
The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required
下面是我发送邮件的代码。
MailMessage mail = new MailMessage("host@gmail.com","User@gamil.com");
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
mail.Subject = "Any String"
mail.Body = mailbody;
mail.IsBodyHtml = true;
SmtpServer.Port = 587;
SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;
SmtpServer.UseDefaultCredentials = false;
SmtpServer.Credentials = new System.Net.NetworkCredential("xyz@gmail.com","123");
SmtpServer.EnableSsl = true;
SmtpServer.Send(mail);
有什么解决办法吗?请给我建议!
编辑: OP 添加了对回答这个问题至关重要的额外信息,但我保留了旧答案,因为它可能仍然对某人有帮助
新答案:
This Whosebug 问题已经回答了这个问题
旧答案:
由于 this Whosebug 答案已经回答,您将 SMTP 服务器上的端口更改为 587
而不是默认值 (25
),这需要提升权限导致此错误更改为:
SmtpServer.Port = 587;
对此:
SmtpServer.Port = 25;
它应该可以工作
注意: 使用 SSL 时,端口需要 443
答案:你的代码加上SmtpDeliveryFormat.SevenBit
示例:
using (SmtpClient smtp = new SmtpClient())
{
NetworkCredential credential = new NetworkCredential
{
UserName = WebConfigurationManager.AppSettings["UserName"],
Password = WebConfigurationManager.AppSettings["Password"],
};
smtp.Credentials = credential;
smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
smtp.DeliveryFormat = SmtpDeliveryFormat.SevenBit;
smtp.Host = WebConfigurationManager.AppSettings["Host"];
smtp.Port = WebConfigurationManager.AppSettings["Port"].ToNcInt();
smtp.EnableSsl = Convert.ToBoolean(WebConfigurationManager.AppSettings["EnableSsl"]);
smtp.Send(mail);
}
试试这个
using System;
using System.Net;
using System.Net.Mail;
namespace AmazonSESSample
{
class Program
{
static void Main(string[] args)
{
// Replace sender@example.com with your "From" address.
// This address must be verified with Amazon SES.
String FROM = "a@a.com";
String FROMNAME = "ABC";
// Replace recipient@example.com with a "To" address. If your account
// is still in the sandbox, this address must be verified.
String TO = "a@a.com";
// Replace smtp_username with your Amazon SES SMTP user name.
String SMTP_USERNAME = "a@a.com";
// Replace smtp_password with your Amazon SES SMTP user name.
String SMTP_PASSWORD = "ASJKAJSN";
// (Optional) the name of a configuration set to use for this message.
// If you comment out this line, you also need to remove or comment out
// the "X-SES-CONFIGURATION-SET" header below.
String CONFIGSET = "ConfigSet";
// If you're using Amazon SES in a region other than US West (Oregon),
// replace email-smtp.us-west-2.amazonaws.com with the Amazon SES SMTP
// endpoint in the appropriate AWS Region.
String HOST = "smtp-relay.sendinblue.com";
// The port you will connect to on the Amazon SES SMTP endpoint. We
// are choosing port 587 because we will use STARTTLS to encrypt
// the connection.
int PORT = 587;
// The subject line of the email
String SUBJECT =
"Amazon SES test (SMTP interface accessed using C#)";
// The body of the email
String BODY =
"<h1>Amazon SES Test</h1>" +
"<p>This email was sent through the " +
"<a href='https://aws.amazon.com/ses'>Amazon SES</a> SMTP interface " +
"using the .NET System.Net.Mail library.</p>";
// Create and build a new MailMessage object
MailMessage message = new MailMessage();
message.IsBodyHtml = true;
message.From = new MailAddress(FROM, FROMNAME);
message.To.Add(new MailAddress(TO));
message.Subject = SUBJECT;
message.Body = BODY;
// Comment or delete the next line if you are not using a configuration set
message.Headers.Add("X-SES-CONFIGURATION-SET", CONFIGSET);
using (var client = new System.Net.Mail.SmtpClient(HOST, PORT))
{
// Pass SMTP credentials
client.Credentials =
new NetworkCredential(SMTP_USERNAME, SMTP_PASSWORD);
// Enable SSL encryption
client.EnableSsl = true;
// Try to send the message. Show status in console.
try
{
Console.WriteLine("Attempting to send email...");
client.Send(message);
Console.WriteLine("Email sent!");
}
catch (Exception ex)
{
Console.WriteLine("The email was not sent.");
Console.WriteLine("Error message: " + ex.Message);
}
}
}
}
}
我正在尝试通过 Gmail 发送邮件。当我在 localhost 上测试时,我发送邮件成功,但是当我将它上传到 web 主机时,这不起作用。我看到了这种类型的错误:
Request for the permission of type System.Net.Mail.SmtpPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 failed.
每当我使用端口 25 时,都会收到以下此类错误:
The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required
下面是我发送邮件的代码。
MailMessage mail = new MailMessage("host@gmail.com","User@gamil.com");
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
mail.Subject = "Any String"
mail.Body = mailbody;
mail.IsBodyHtml = true;
SmtpServer.Port = 587;
SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;
SmtpServer.UseDefaultCredentials = false;
SmtpServer.Credentials = new System.Net.NetworkCredential("xyz@gmail.com","123");
SmtpServer.EnableSsl = true;
SmtpServer.Send(mail);
有什么解决办法吗?请给我建议!
编辑: OP 添加了对回答这个问题至关重要的额外信息,但我保留了旧答案,因为它可能仍然对某人有帮助
新答案: This Whosebug 问题已经回答了这个问题
旧答案:
由于 this Whosebug 答案已经回答,您将 SMTP 服务器上的端口更改为 587
而不是默认值 (25
),这需要提升权限导致此错误更改为:
SmtpServer.Port = 587;
对此:
SmtpServer.Port = 25;
它应该可以工作
注意: 使用 SSL 时,端口需要 443
答案:你的代码加上SmtpDeliveryFormat.SevenBit
示例:
using (SmtpClient smtp = new SmtpClient())
{
NetworkCredential credential = new NetworkCredential
{
UserName = WebConfigurationManager.AppSettings["UserName"],
Password = WebConfigurationManager.AppSettings["Password"],
};
smtp.Credentials = credential;
smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
smtp.DeliveryFormat = SmtpDeliveryFormat.SevenBit;
smtp.Host = WebConfigurationManager.AppSettings["Host"];
smtp.Port = WebConfigurationManager.AppSettings["Port"].ToNcInt();
smtp.EnableSsl = Convert.ToBoolean(WebConfigurationManager.AppSettings["EnableSsl"]);
smtp.Send(mail);
}
试试这个
using System;
using System.Net;
using System.Net.Mail;
namespace AmazonSESSample
{
class Program
{
static void Main(string[] args)
{
// Replace sender@example.com with your "From" address.
// This address must be verified with Amazon SES.
String FROM = "a@a.com";
String FROMNAME = "ABC";
// Replace recipient@example.com with a "To" address. If your account
// is still in the sandbox, this address must be verified.
String TO = "a@a.com";
// Replace smtp_username with your Amazon SES SMTP user name.
String SMTP_USERNAME = "a@a.com";
// Replace smtp_password with your Amazon SES SMTP user name.
String SMTP_PASSWORD = "ASJKAJSN";
// (Optional) the name of a configuration set to use for this message.
// If you comment out this line, you also need to remove or comment out
// the "X-SES-CONFIGURATION-SET" header below.
String CONFIGSET = "ConfigSet";
// If you're using Amazon SES in a region other than US West (Oregon),
// replace email-smtp.us-west-2.amazonaws.com with the Amazon SES SMTP
// endpoint in the appropriate AWS Region.
String HOST = "smtp-relay.sendinblue.com";
// The port you will connect to on the Amazon SES SMTP endpoint. We
// are choosing port 587 because we will use STARTTLS to encrypt
// the connection.
int PORT = 587;
// The subject line of the email
String SUBJECT =
"Amazon SES test (SMTP interface accessed using C#)";
// The body of the email
String BODY =
"<h1>Amazon SES Test</h1>" +
"<p>This email was sent through the " +
"<a href='https://aws.amazon.com/ses'>Amazon SES</a> SMTP interface " +
"using the .NET System.Net.Mail library.</p>";
// Create and build a new MailMessage object
MailMessage message = new MailMessage();
message.IsBodyHtml = true;
message.From = new MailAddress(FROM, FROMNAME);
message.To.Add(new MailAddress(TO));
message.Subject = SUBJECT;
message.Body = BODY;
// Comment or delete the next line if you are not using a configuration set
message.Headers.Add("X-SES-CONFIGURATION-SET", CONFIGSET);
using (var client = new System.Net.Mail.SmtpClient(HOST, PORT))
{
// Pass SMTP credentials
client.Credentials =
new NetworkCredential(SMTP_USERNAME, SMTP_PASSWORD);
// Enable SSL encryption
client.EnableSsl = true;
// Try to send the message. Show status in console.
try
{
Console.WriteLine("Attempting to send email...");
client.Send(message);
Console.WriteLine("Email sent!");
}
catch (Exception ex)
{
Console.WriteLine("The email was not sent.");
Console.WriteLine("Error message: " + ex.Message);
}
}
}
}
}