@programmer_developer
Начинающий программист C#

Как правильно настроить smtp для email рассылок?

Доброго времени суток! Я пишу приложение для рассылки писем по email адресам, у меня есть бд аккаунтов(абсолютно разных сервисов электронной почты: mail.ru, walla.co.il, pandora.be, yahoo.co и т.д.)
Собственно вопрос: Как можно сделать упрощенную настройку smtp? Я делаю так(знаю что это ужасно неправильно, но не знаю как по другому):
Настройка smtp
switch (host) // host - это string переменная которая получается в результате парсинга аккаунта почты.
                    {
                        case "@mail.ru":
                            smtp = new SmtpClient("smtp.mail.ru", 587);
                            break;
                        case "@yahoo.co":
                            smtp = new SmtpClient("smtp.mail.yahoo.com", 465);
                            _smtp = new SmtpClient("smtp.mail.yahoo.com", 587); // _smtp использую потому что на сайтах где я смотрел настройки для smtp, было несколько портов. Сначала отправляю на 1-ый порт, если ошибка - на второй.
                            break;
                        case "@gmx.at":
                            smtp = new SmtpClient("smtp.gmx.com", 587);
                            _smtp = new SmtpClient("smtp.gmx.com", 465);
                            break;
                        case "@aol.com":
                            smtp = new SmtpClient("smtp.aol.com", 465);
                            _smtp = new SmtpClient("smtp.aol.com", 587);
                            break;
                        case "@hotmail.com":
                            smtp = new SmtpClient("smtp.live.com", 465);
                            _smtp = new SmtpClient("smtp.live.com", 587);
                            break;
                        case "@live.com":
                            smtp = new SmtpClient("smtp.live.com", 465);
                            _smtp = new SmtpClient("smtp.live.com", 587);
                            break;
                        case "@twc.com":
                            smtp = new SmtpClient("mail.twc.com", 465);
                            _smtp = new SmtpClient("mail.twc.com", 587);
                            break;
                        case "@roadrunner.com":
                            smtp = new SmtpClient("mail.twc.com", 465);
                            _smtp = new SmtpClient("mail.twc.com", 587);
                            break;
// и т.д.
                    }
Отправка писем на почту
MailAddress from = new MailAddress(login, name);
                    MailAddress to = new MailAddress(listTo[index]);
                    MailMessage m = new MailMessage(from, to);
                    m.Subject = TBSubject.Text;
                    m.Body = message;

                    try
                    {
                        smtp.Credentials = new NetworkCredential(login, password);
                        smtp.EnableSsl = true;
                        smtp.Send(m);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                        _smtp.Credentials = new NetworkCredential(login, password);
                        _smtp.EnableSsl = true;
                        _smtp.Send(m);
                    }



И 2-ой вопрос:
Мне нужно отправлять сообщения с html тегами, а именно <"a href='URL'>link">, и чтобы в письме это сообщение отображалось link(как ссылка), как это реализовать?

P.S. Спасибо!
  • Вопрос задан
  • 279 просмотров
Решения вопроса 1
@kttotto
пофиг на чем писать
Если конкретно по Вашему коду, то
1. Если Вы так жестко прописываете все настройки в коде, то сделайте список настроек. Сначала сам класс
class SmtpSetting
{
	public string Host {get; set;}
	public string Server {get; set;}
	public string Port {get; set;}
}

Потом сам список
var smptSettings = new List<SmptSetting>
{
	new SmptSetting
	{
		Host = "mail.ru",
		Server = "smtp.mail.ru",
		Port = 587
	},
	new SmptSetting
	{
		Host = "yahoo.co",
		Server = "smtp.yahoo.co",
		Port = 465
	},
	...
}

И тогда Вам не придется использовать switch
var currentSmtp = smptSettings.FirstOrDefault(x => x.Host == host);
if(currentSmtp != null)
{
	var smtp = new SmtpClient(currentSmtp.Server, currentSmtp.Port);
}

Вы сказали, что у Вас есть бд, где храните аккаунты. Храните там же и настройки smtp, в том же виде (Id,Host,Server,Port), тогда из бд Вы будете получать весь список серверов и при изменении списка настроек smtp, не придется лезть в код и пересобирать проект.

2. И для того, чтобы Вы могли вставлять html разметку в письмо, у MailMessage есть настройка IsBodyHtml, установите ее в true.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы