Отправка почты через SMTP с использованием OAuth 2 - PullRequest
0 голосов
/ 27 сентября 2019

Мне нужно отправить SMTP-почту через OAuth 2. Я создал некоторый код для получения токена, но получил следующее сообщение об ошибке:

Ошибка: «unauthorized_client», Описание: «Клиентне авторизован для получения маркеров доступа с использованием этого метода, или клиент не авторизован для какой-либо из запрошенных областей. ", Uri:

Код:

var certificate = new X509Certificate2(Server.MapPath("folder/serviceaccountgenratedcredecialfile.p12"), "notasecret", X509KeyStorageFlags.Exportable);
var credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer("service-account-email@my-project-name.iam.gserviceaccount.com")
                     {
                         Scopes = new[] { "https://mail.google.com/" },
                         User = "user-email@gmail.com"
                     }.FromCertificate(certificate));

bool result = credential.RequestAccessTokenAsync(CancellationToken.None).Result;

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Например Gmail:

void SendMailWithXOAUTH2(string userEmail, string accessToken)
{
    try
    {
        // Gmail SMTP server address
        SmtpServer oServer = new SmtpServer("smtp.gmail.com");
        // enable SSL connection
        oServer.ConnectType = SmtpConnectType.ConnectSSLAuto;
        // Using 587 port, you can also use 465 port
        oServer.Port = 587;

        // use Gmail SMTP OAUTH 2.0 authentication
        oServer.AuthType = SmtpAuthType.XOAUTH2;
        // set user authentication
        oServer.User = userEmail;
        // use access token as password
        oServer.Password = accessToken;

        SmtpMail oMail = new SmtpMail("TryIt");
        // Your gmail email address
        oMail.From = userEmail;
        oMail.To = "support@emailarchitect.net";

        oMail.Subject = "test email from gmail account with OAUTH 2";
        oMail.TextBody = "this is a test email sent from c# project with gmail.";

        Console.WriteLine("start to send email using OAUTH 2.0 ...");

        SmtpClient oSmtp = new SmtpClient();
        oSmtp.SendMail(oServer, oMail);

        Console.WriteLine("The email has been submitted to server successfully!");
    }
    catch (Exception ep)
    {
        Console.WriteLine("Exception: {0}", ep.Message);
    }

Использование идентификатора клиента и секрета клиента для получения токена доступа.Теперь вы можете использовать идентификатор клиента и секрет клиента, чтобы получить адрес электронной почты пользователя и токен доступа.По сути, OAUTH использует протокол HTTP, прежде всего, пользователь вводит имя пользователя и пароль в Google Web Authentication, Google возвращает токен доступа обратно в ваше приложение, и, наконец, ваше приложение использует токен доступа для доступа Gmail SMTP server.Примеры кодов можно найти в EASendMail Путь установки \ Samples_ {язык программирования / Инструмент разработчика} \ GmailOauth. * Project.

Вы должны подать заявку на идентификатор клиента и секрет клиента, не используйте клиентid в примере проекта, потому что он сейчас ограничен.Если вы получили информацию «Это приложение не подтверждено», нажмите "advanced" -> Go to ... для теста.

0 голосов
/ 27 сентября 2019
        MailMessage mailMessage = new MailMessage();
        mailMessage.From = new MailAddress("abc@abc.com"); //From Email Id
        mailMessage.Subject = Subj; //Subject of Email
        mailMessage.Body = Message; //body or message of Email
        mailMessage.IsBodyHtml = true;
        List<string> ToEmailList = ToEmail.Split(',').ToList();
        ToEmailList.ForEach(x => mailMessage.To.Add(new MailAddress(x.ToString())));
        SmtpClient smtp = new SmtpClient("smtpout.secureserver.net", 25);
        smtp.Credentials = new System.Net.NetworkCredential()
        {
            UserName = "abc@abc.com",
            Password = "abc@001"
        };
        smtp.EnableSsl = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...