Отправка почты через C # с помощью gmail не работает после развертывания на хосте - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь отправить почту через Gmail.Я успешно отправляю почту при тестировании на localhost, но это не работает при загрузке на веб-хостинг.Я вижу этот тип ошибки:

Запрос на разрешение типа System.Net.Mail.SmtpPermission, System, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089 завершился неудачей.

Всякий раз, когда я использую порт 25, выдается следующий тип ошибки:

Для SMTP-сервера требуется безопасное соединение, или клиент не был аутентифицирован.Ответ сервера: 5.5.1 Требуется проверка подлинности

Ниже приведен код отправки электронной почты.

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);

Есть ли какое-либо решение?Пожалуйста, предложите мне!

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

Ответ: Ваш код добавить 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);
                }
0 голосов
/ 16 октября 2018

Попробуйте

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);
            }
        }
    }
}

}

0 голосов
/ 16 октября 2018

Редактировать: OP Добавлена ​​дополнительная информация, необходимая для ответа на этот вопрос, но я сохраняю старый ответ, поскольку он все еще может помочь кому-то

Новый ответ: Этот вопрос StackOverflow уже ответил на этот вопрос

OldAnswer: Поскольку этот StackOverflow ответ уже ответил, вы изменили порт на SMTP-сервере на587 вместо значения по умолчанию (25), и для этого требуются повышенные разрешения, вызывающие эту ошибку, измените это:

SmtpServer.Port = 587;

на следующее:

SmtpServer.Port = 25;

и оно должно работать

Примечание: При использовании SSL порт должен быть 443

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...