Sending mail through C# with gmail is not working after deploying to host

社会主义新天地 提交于 2020-03-01 03:21:10

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!