Входящие параметры метода Dictionary

291
01 февраля 2018, 15:19

Столкнулся с проблемой, когда метод принимает входящие параметры коллекции словаря, подскажите пожалуйста, как осуществить передачу параметров в метод.

    public bool SendMail(Dictionary<string, string> message)
    {
        try
        {
            var from = "MailAdress";
            var pass = "password";
            SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            client.Credentials = new System.Net.NetworkCredential(from, pass);
            client.EnableSsl = true;

            var mail = new MailMessage(from, message["Delivery"]);
            mail.Subject = message["Subject"];
            mail.Body = message["Body"];
            mail.IsBodyHtml = true;
            client.Send(mail);
            return true;
        }
        catch (Exception e)
        {
            return false;
        }
    }
Answer 1

Вам непонятно, как составлять message?

var message = new Dictionary<string, string>
{
    {"Subject", "Мой заголовок письма"},
    {"Body", "Содержимое письма"},
    {"Delivery", "Email@Addr.ru"},
};
SendMail(message);

Или как вариант:

var message = new Dictionary<string, string>();
message.Add("Subject", "Мой заголовок письма");
message.Add("Body", "Содержимое письма");
message.Add("Delivery", "Email@Addr.ru");
SendMail(message);

Легко гуглится по словам c# initialize dictionary, например Proper way to initialize a C# dictionary with values already in it?

Но вообще, лучше не использовать в подобных случаях словарь, так как код будет достаточно хрупким и из-за небольших опечаток может сломаться.

Давайте лучше переделаем на класс:

public class MailMessageParams
{
    public string Subject { get; set; }
    public string HtmlBody { get; set; }
    public MailAddress To { get; set; }
}

Переделаем ваш метод:

public bool SendMail(MailMessageParams message)
{
    try
    {
        var from = "MailAdress";
        var pass = "password";
        SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
        client.DeliveryMethod = SmtpDeliveryMethod.Network;
        client.UseDefaultCredentials = false;
        client.Credentials = new System.Net.NetworkCredential(from, pass);
        client.EnableSsl = true;
        var mail = new MailMessage(new MailAddress(from), message.To);
        mail.Subject = message.Subject;
        mail.Body = message.HtmlBody;
        mail.IsBodyHtml = true;
        client.Send(mail);
        return true;
    }
    catch (Exception)
    {
        return false;
    }
}

Вызов:

var message = new MailMessageParams
{
    Subject = "Мой заголовок письма",
    HtmlBody = "Html содержимое письма",
    To = new MailAddress("Email@Addr.ru"),
};
SendMail(message);
READ ALSO
ASP NET MVC медленно работает сайт

ASP NET MVC медленно работает сайт

Имеется сайт MVC+ БД MySQL - все это вертится на хостинге regru

288
Запретить отправку сообщений сокету

Запретить отправку сообщений сокету

В цикле идет обработка входящих сообщений и при необходимости отправка ответаНо возникают ситуации, когда отправлять ответ не нужно

263
Получить индекс перечисления

Получить индекс перечисления

Имеется перечисление вида:

198
AES-256 Padding (C#)

AES-256 Padding (C#)

ЗдравствуйтеПомогите пожалуйста вычислить CBC Padding (AES-256)

225