API Gmail: использование почтового адреса, содержащего umlauts, приводит к получению SMTPEception: клиент или сервер настроены только для адресов с локальными частями ASCII - PullRequest
0 голосов
/ 21 марта 2020

Попытка отправить письмо с API gmail на почтовый адрес, содержащий умлауты. например, büro@gmail.com. Получение SmtpException затем:

maildress: GeneralFailure: System.Net.Mail.SmtpException: The client or server is only configured for E-mail addresses with ASCII local-parts: büro@gmail.com.
bei System.Net.Mail.MailAddress.GetUser(Boolean allowUnicode)
bei System.Net.Mail.MailAddress.GetAddress(Boolean allowUnicode)
bei System.Net.Mail.MailAddress.GetSmtpAddress(Boolean allowUnicode)
bei System.Net.Mail.SmtpClient.ValidateUnicodeRequirement(MailMessage message, MailAddressCollection recipients, Boolean allowUnicode)
bei System.Net.Mail.SmtpClient.Send(MailMessage message)

Я знаю, что когда я использую клиент *. 1009 * smtp напрямую, вы можете установить SmtpDeliveryFormat.International, чтобы иметь возможность. Но как установить его, когда я использую API gmail?

private GmailService _service;

public void SendMail(MailMessage message)
{
    message.SubjectEncoding = Encoding.UTF8;
    message.BodyEncoding = Encoding.UTF8;
    message.IsBodyHtml = true;

    MimeKit.MimeMessage mimeMessage = MimeKit.MimeMessage.CreateFromMailMessage(message);
    Message sendMmessage = new Message {Raw = Base64UrlEncode(mimeMessage)};

    _service.Users.Messages.Send(sendMmessage, _fromMailAdress).Execute();
}

Поскольку я использую бизнес-аккаунт Google, я не могу напрямую использовать SMTPClient, потому что Google отключил использование менее безопасных приложений.

1 Ответ

1 голос
/ 21 марта 2020

Я решил, используя класс IdnMapping

IdnMapping idn = new IdnMapping();

MailMessage message = new MailMessage
{
    From = new MailAddress(_fromMailAdress),
};
message.BodyEncoding = Encoding.UTF8;
message.IsBodyHtml = true;
message.To.Add(idn.GetAscii(toMailAdress));
message.Subject = subject;
message.Body = content;

büro@gmail.com будет преобразован в xn--bro-hoa@gmail.com

...