问题
I am trying to send mail through 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.
Whenever I am using port 25 get this type of error below:
The SMTP server requires a secure connection or the client was not authenticated. The server response was: 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!
回答1:
Edit: OP Added extra information crucial to answering this question, but I'm keeping the old answer around as it might still help someone
New Answer: This StackOverflow question already answered this question
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:
SmtpServer.Port = 587;
to this:
SmtpServer.Port = 25;
and it should work
Note: When using SSL the port needs to be 443
回答2:
Answer : Your code add 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);
}
回答3:
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);
}
}
}
}
}
来源:https://stackoverflow.com/questions/52829188/sending-mail-through-c-sharp-with-gmail-is-not-working-after-deploying-to-host