Установить из имени пользователя в почте? - PullRequest
1 голос
/ 20 августа 2011

Я отправляю письма по следующему шаблону:

public static bool SendPasswordMail(MembershipUser user, Control owner, string password)
{
    var definition = new MailDefinition { BodyFileName = string.Concat(AccountRoot, "password.htm"), IsBodyHtml = true };
    var subject = "Your new password - {0}".FormatWith(ApplicationConfiguration.ApplicationName);

    var data = ExtendedData(DefaultData, subject, user);

    data.Add("<%Password%>", password);

    return definition.CreateMailMessage(user.Email, data, owner).Send(subject);
}

public static bool Send(this MailMessage message, string subject)
{
    try
    {
        using (message)
        {
            message.Subject = subject;

            using (var client = new SmtpClient())
            client.Send(message);
        }
    }
    catch
    {
        return false;
    }

    return true;
}

Вместо того, чтобы устанавливать тему «Ваш новый пароль - Веб-сайт», я хотел бы установить для имени пользователя значение «Веб-сайт», итолько "Ваш новый пароль".Но я не могу понять, как установить имя пользователя.

Мой smtp элемент в web.config выглядит так:

<smtp deliveryMethod="Network" from="noreply@site.com">
     <network host="localhost" port="25" userName="noreply@site.com" password="******" />
</smtp>

Ответы [ 2 ]

4 голосов
/ 20 августа 2011

Взгляните на определение MailDefinition.CreateMailMessage на MSDN.

Указывает, что второй параметр (объект IDictionary, переменная «data» в вашем примере кода) должен содержать строки, которые заменяются в сообщении электронной почты.

Используя этот объект, вы можете добавить замену для адреса from следующим образом:

data.Add("<%From%>", "fromaddress@domain.com");

Однако из-за возможности подделки адресов отправителей с использованием SMTP почти все почтовые обменники будут использовать систему проверки электронной почты, такую ​​как Sender Policy Framework (SPF) , чтобы гарантировать, что полученные электронные письма были отправлены с действительный источник.

Таким образом, вы не можете использовать любой адрес электронной почты в поле от, если хотите, чтобы ваши получатели получали ваши электронные письма. Вы должны использовать адрес электронной почты, соответствующий домену, с которого вы отправляете. Изменения в DNS также необходимы для проведения необходимых проверок.

Оформить заказ по этой ссылке: Обзор структуры политики отправителя

В нем говорится:

SPF легко понять. «Интернет» использует DNS (доменное имя Система) для разрешения доменных имен (как пример www.msexchange.org) в IP-адреса. DNS также используется для направления запросов на разные услуги, такие как электронная почта и веб-серверы. Для каждого домена по всему В мире должна существовать запись MX (Mail Exchanger). MX запись сообщает отправитель электронной почты, на котором расположен целевой сервер для получения почты.

SPF публикует записи "обратного MX" в DNS, которые сообщают почте Отправитель, с которого машины отправляют почту с домена.

Получатель электронной почты теперь может проверить эти записи, чтобы убедиться, что электронная почта поступает от «доверенного» отправителя с этого домена.

Эти записи "обратного MX" могут быть легко опубликованы в DNS. Занимает только одна строка в DNS для выполнения всех требований. Я дам тебе пример далее в этой статье.

SPF работает на уровне транзакции SMTP и требует Три наиболее важные части информации:

MAIL FROM: параметр входящей почты HELO или EHLO параметр отправляющего SMTP-сервера (используется для отказов Mailer-Deamon которые отправляют пустую MAIL FROM) IP-адрес отправляющего SMTP Сервер


Редактировать

Нет способа передать псевдоним отправителя (отображаемое имя) в MailDefinition при создании, и я не уверен, как добавить данные в объект IDictionary, но должно работать следующее (в методе расширения Send):

message.Subject = subject;
message.From = new MailAddress(message.From.Address, "Display Name");

Надеюсь, это поможет.

0 голосов
/ 20 августа 2011

Изменение вашего SendPasswordMail на это должно сделать:

public static bool SendPasswordMail(MembershipUser user, Control owner, string password)
{
    var definition = new MailDefinition { BodyFileName = string.Concat(AccountRoot, "password.htm"), IsBodyHtml = true };
    var subject = "Your new password";

    var data = ExtendedData(DefaultData, subject, ApplicationConfiguration.ApplicationName);

    data.Add("<%Password%>", password);

    return definition.CreateMailMessage(user.Email, data, owner).Send(subject);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...