#c# #asp.net-mvc #asp.net-core #mailkit
#c# #asp.net-mvc #asp.net-core #mailkit
Вопрос:
У меня есть следующий код, который отлично работает при отправке электронных писем, но я получаю эти предупреждения, в которых говорится, что я должен пометить некоторые методы устаревшими. Я просмотрел документы на веб-сайте MailKit, и там говорится, что я должен использовать другой конструктор, чем MailboxAddress(String)
. Я понимаю это, но у меня возникают проблемы с тем, как реализовать то, о чем они просят, это кажется простым, но я думаю, что я пропустил шаг. Это один из способов, который рекомендует MailboxAddress(String, String)
новый способ сделать это.
Кодируйте следующим образом:
Контроллер
public IActionResult RequestPassword()
{
var message = new Message(new string[]
{
"email@gmail.com"
},
"Test Email",
"This is the content from out email."
);
_emailSender.SendEmail(message);
return View();
}
Message.cs
Для этого класса предупреждение появляется в строке To.AddRange(to.Select(x => new MailboxAddress(x)));
public class Message
{
public List<MailboxAddress> To { get; set; }
public string Subject { get; set; }
public string Content { get; set; }
public Message(IEnumerable<string> to, string subject, string content)
{
To = new List<MailboxAddress>();
To.AddRange(to.Select(x => new MailboxAddress(x)));
Subject = subject;
Content = content;
}
}
Класс EmailSender
Для этого класса предупреждение появляется в строке emailMessage.From.Add(new MailboxAddress(_emailConfig.From));
public class EmailSender : IEmailSender
{
private readonly EmailConfiguration _emailConfig;
public EmailSender(EmailConfiguration emailConfig)
{
_emailConfig = emailConfig;
}
// This creates the Email and then sends it.
public void SendEmail(Message message)
{
var emailMessage = CreateEmailMessage(message);
Send(emailMessage);
}
// Creates Email Message
private MimeMessage CreateEmailMessage(Message message)
{
var emailMessage = new MimeMessage();
emailMessage.From.Add(new MailboxAddress(_emailConfig.From));
emailMessage.To.AddRange(message.To);
emailMessage.Subject = message.Subject;
emailMessage.Body = new TextPart(MimeKit.Text.TextFormat.Text)
{
Text = message.Content
};
return emailMessage;
}
// Sends the email
private void Send(MimeMessage mailMessage)
{
using var client = new SmtpClient();
try
{
client.Connect(_emailConfig.MailServer, _emailConfig.MailPort, false);
client.Authenticate(_emailConfig.Username, _emailConfig.Password);
client.Send(mailMessage);
}
catch (Exception)
{
throw;
}
finally
{
client.Disconnect(true);
client.Dispose();
}
}
}
Интерфейс
public interface IEmailSender
{
void SendEmail(Message message);
}
Если вам также нужен StartUp.cs, дайте мне знать.
Ответ №1:
У получателя будут отображаться только адрес электронной почты и displayname.
var address = new MailboxAddress("Tonton", "tonton@example.com");
Вывод
ОБНОВИТЕ
, если хотите добавить отображаемое имя. У вас может быть что-то вроде этого.
public class EmailAddress
{
public string Address { get; set; }
public string DisplayName { get; set; }
}
public class Message
{
public List<MailboxAddress> To { get; set; }
public string Subject { get; set; }
public string Content { get; set; }
public Message(IEnumerable<EmailAddress> to, string subject, string content)
{
To = new List<MailboxAddress>();
To.AddRange(to.Select(x => new MailboxAddress(x.DisplayName, x.Address)));
Subject = subject;
Content = content;
}
}
Комментарии:
1. Как мне добавить это в
To = new List<MailBoxAddress>();
список в классе Message?2. Поскольку в вашем примере фрагмента кода нет отображаемых имен, просто сделайте:
To.AddRange(to.Select(x => new MailboxAddress(string.Empty, x)));
3. Так что, если бы я захотел добавить отображаемое имя? что бы я тогда сделал? Я думаю, это та часть, в которой я запутываюсь больше всего. Спасибо!
4. @whisk вы можете проверить обновление моего ответа. Если это поможет вам добавить отображаемое имя.