[英]Sending mail through C# with gmail is not working after deploying to host
I am trying to send mail through Gmail.我正在尝试通过 Gmail 发送邮件。 I am sending mail successfully when I am testing on localhost, but this does not work when I upload it to a web host.我在本地主机上测试时成功发送邮件,但是当我将它上传到网络主机时这不起作用。 I am seeing this type of error:我看到这种类型的错误:
Request for the permission of type System.Net.Mail.SmtpPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 failed. System.Net.Mail.SmtpPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 类型的权限请求失败。
Whenever I am using port 25 get this type of error below:每当我使用端口 25 时,都会出现以下此类错误:
The SMTP server requires a secure connection or the client was not authenticated. SMTP 服务器需要安全连接或客户端未通过身份验证。 The server response was: 5.5.1 Authentication Required服务器响应为:5.5.1 Authentication Required
Below is my code of send email.下面是我发送电子邮件的代码。
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);
Is there any solution?有什么解决办法吗? Please suggest to me!请给我建议!
Edit: OP Added extra information crucial to answering this question, but I'm keeping the old answer around as it might still help someone编辑: OP 添加了对回答这个问题至关重要的额外信息,但我保留旧答案,因为它可能仍然对某人有所帮助
New Answer: This StackOverflow question already answered this question新答案:这个StackOverflow 问题已经回答了这个问题
OldAnswer: As this StackOverflow answer already answered, you changed the Port on the SMTP Server to 587
instead of its default ( 25
) and this requires elevated permissions causing this error change this: OldAnswer:由于此StackOverflow 答案已经回答,您将 SMTP 服务器上的端口更改为587
而不是其默认值 ( 25
),这需要提升权限,导致此错误更改:
SmtpServer.Port = 587;
to this:对此:
SmtpServer.Port = 25;
and it should work它应该工作
Note: When using SSL the port needs to be 443
注意:使用 SSL 时,端口需要为443
Answer : Your code add SmtpDeliveryFormat.SevenBit
答:您的代码添加SmtpDeliveryFormat.SevenBit
Example:例子:
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);
}
Try This尝试这个
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);
}
}
}
}
} }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.