Отправить почту, чтобы “От кого” стоял произвольный email

284
08 декабря 2016, 22:44

Есть обратная связь, пользователь должен заполнить обязательное поле Email. При нажатии на кнопку отправить, письмо отправляется на support@домен.ком.

Задача:Чтобы в пришедшем письме в поле "от кого" стояла почта клиента (Email), а не sender@домен.ком.

Цель: Далее, чтобы пользователь в почтовике нажал кнопку "ответить" и начал переписку с клиентом.

Подскажите, как реализовать на C# и есть ли такая возможность.

    public class _MailSender
{
    /// <summary>
    /// Вложения, по умолчанию null
    /// </summary>
    public List<Attachment> Attachments = new List<Attachment>();
    /// <summary>
    /// Содержимое письма, по умолчанию пустое
    /// </summary>
    public string Body = string.Empty;
    /// <summary>
    /// Отправитель, по умолчанию значение берется из конфига
    /// </summary>
    public string EmailFrom = ConfigurationManager.AppSettings["Mailsender_email_from"];
    /// <summary>
    /// Адресат(ы), указываются через ',' или ';', по умолчанию значение пустое
    /// </summary>
    public string EmailTo = string.Empty;
    /// <summary>
    /// Является ли содержимое письма HTML, по умолчанию true
    /// </summary>
    public bool IsBodyHtml = true;
    /// <summary>
    /// Использовать ли защищенный протокол SSL, по умолчанию false
    /// </summary>
    public bool SMTPEnableSsl = _Data.GetBool(ConfigurationManager.AppSettings["Mailsender_smtp_use_ssl"]);
    /// <summary>
    /// SMTP Логин, по умолчанию значение берется из конфига. Если не указан логин или пароль 
    /// SmtpServer.Credentials установлен не будет
    /// </summary>
    public string SMTPLogin = ConfigurationManager.AppSettings["Mailsender_smtp_login"];
    /// <summary>
    /// SMTP Пароль, по умолчанию значение берется из конфига. Если не указан логин или пароль 
    /// SmtpServer.Credentials установлен не будет
    /// </summary>
    public string SMTPPassword = ConfigurationManager.AppSettings["Mailsender_smtp_password"];
    /// <summary>
    /// SMTP Порт, по умолчанию 25
    /// </summary>
    public int SMTPPort = _Data.GetInt(ConfigurationManager.AppSettings["Mailsender_smtp_port"]);
    /// <summary>
    /// SMTP Сервер, по умолчанию значение берется из конфига
    /// </summary>
    public string SMTPServer = ConfigurationManager.AppSettings["Mailsender_smtp_server"];
    /// <summary>
    /// Тема письма
    /// </summary>
    public string Subject = string.Empty;
    /// <summary>
    /// Ссылка для отписки
    /// </summary>
    public string ListUnsubscribe = string.Empty;
    /// <summary>
    /// Делегат для ассинхронной отправки писем
    /// </summary>
    /// <param name="mailMessage"></param>
    private delegate void SomeDelegate(MailMessage mailMessage);
    /// <summary>
    /// Отправляет сообщение с настройками заданными в этом классе
    /// </summary>

    public void MailSend()
    {
        // Обработка ошибок входящих параметров
        if (string.IsNullOrEmpty(this.SMTPServer)) throw new Exception("Нет настроек почты. Сообщение не отправлено");
        if (string.IsNullOrEmpty(this.EmailTo)) throw new Exception("Не указаны получатели. Сообщение не отправлено");
        if (string.IsNullOrEmpty(this.EmailFrom)) throw new Exception("Не указан электронный адрес отправителя. Сообщение не отправлено");
        // Меняем разделитель, на тот, который поддерживает MailMessage
        EmailTo = EmailTo.Replace(";", ",");
        MailMessage mailMessage = null;
        // Формирование сообщения
        try
        {
            mailMessage = new MailMessage(new MailAddress(this.EmailFrom), new MailAddress(this.EmailTo));
        }
        catch (Exception ex) { throw new Exception(ex.Message); }
        // Отправитель и получатель (проверка на валидность адресов)
        try { mailMessage.From = new MailAddress(this.EmailFrom); }
        catch (FormatException) { throw new Exception("Электронный адрес отправителя не соответствует формату. Сообщение не отправлено"); }
        try { mailMessage.To.Add(this.EmailTo); }
        catch (FormatException) { throw new Exception("Электронный адрес получателя(ей) не соответствует формату. Сообщение не отправлено"); }
        if (_Data.GetString(ListUnsubscribe) != "")
        {
            mailMessage.Headers.Add("List-Unsubscribe", ListUnsubscribe);
        }
        mailMessage.Subject = this.Subject;
        mailMessage.Body = this.Body;
        mailMessage.IsBodyHtml = this.IsBodyHtml;
        foreach (Attachment a in this.Attachments)
            mailMessage.Attachments.Add(a);
        // Формирование смтпКлиента
        SmtpClient client = new SmtpClient(this.SMTPServer);
        client.Port = this.SMTPPort;
        if (!string.IsNullOrEmpty(this.SMTPLogin)
            && !string.IsNullOrEmpty(this.SMTPPassword))
            client.Credentials = new System.Net.NetworkCredential(this.SMTPLogin, this.SMTPPassword);
        client.EnableSsl = this.SMTPEnableSsl;
        //client.Send(mailMessage);
        try
        {
            client.Send(mailMessage);
        }
        catch (Exception ex)
        {

        }
    }

}
READ ALSO
Как внедрить файлы в ресурсы программы

Как внедрить файлы в ресурсы программы

Внедрил три текстовых файла в проектДумал они все время будут в проекте, однако они ссылаются на файлы в папке debug, что не есть хорошо, так...

231
ASP.NET MVC. Хочу чтобы ссылка открывалась в том же окне, где и почта

ASP.NET MVC. Хочу чтобы ссылка открывалась в том же окне, где и почта

Делаю подтверждение Токена по Email и при подтверждении ссылки в почтовом ящике, осуществляется переход в новую вкладку, мне захотелось сделать...

325
Один поток на action [закрыто]

Один поток на action [закрыто]

Читал на хабре статью про async/await и наткнулся на следующую строчку:

199