Отправка писем из приложения WPF

Я создаю приложение WPF, и одно из требований состоит в том, чтобы пользователь отправлял мне свои отзывы по электронной почте.

Теперь я разработал метод, найденный на сайте Microsoft:

http://support.microsoft.com/kb/310263

который работал. Однако у меня есть некоторые оговорки по этому поводу, так как, если у пользователя не установлен Outlook? А также мне не нравится всплывающая команда, в которой она спрашивает, можно ли использовать Outlook для отправки почты.

Есть ли другое решение? Я не хочу спрашивать пользователя о его SMTP-хосте, так как большинство моих пользователей не знают, как его получить.

Спасибо за вашу помощь и время

1 ответ

У меня также была эта проблема, и я решил обойти ее, отправив электронное письмо с моего сервера.

Проблема в том, что для отправки электронной почты вам нужна информация о сервере пользователя (хост SMTP, имя пользователя, пароль, адрес электронной почты) или, чтобы использовать программное обеспечение, уже имеющееся в системе, которое уже знает эту информацию (outlook) - и это предполагает пользователь может отправлять SMTP-почту вообще (некоторые службы электронной почты не имеют опции SMTP).

Итак, я сделал, чтобы опубликовать контент из моего приложения в простом приложении ASP.net на моем веб-сайте и отправлять почту оттуда - таким образом мне не нужно беспокоиться о SMTP, и он также отлично работает с моим фильтрация спама (приложение только отправляет мне электронную почту, поэтому оно не может быть использовано спаммерами, и оно обходит мою собственную фильтрацию спама, поэтому мне не нужно беспокоиться о потере сообщений обратной связи).

Обновление - вот пример, который вы просили:

Вот мой вспомогательный метод для выполнения простого HTTP POST:

public static string HttpPost(string URI, string Parameters)
{
    System.Net.WebRequest req = System.Net.WebRequest.Create(URI);
    req.ContentType = "application/x-www-form-urlencoded";
    req.Method = "POST";
    byte[] bytes = System.Text.Encoding.ASCII.GetBytes(Parameters);
    req.ContentLength = bytes.Length;
    System.IO.Stream os = req.GetRequestStream();
    os.Write(bytes, 0, bytes.Length);
    os.Close();
    System.Net.WebResponse resp = req.GetResponse();
    if (resp == null) return null;
    System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
    return sr.ReadToEnd().Trim();
}

и использование это:

            HttpPost("http://example.com/Default.aspx",
                "&email=" + Uri.EscapeDataString(form.EMail) +
                "&data=" + Uri.EscapeDataString(errorText));

В этом примере errorText является многострочным возвращаемым значением из Exception.ToString()

На стороне сервера есть простой IHttpHandler (но это может быть любое приложение на стороне сервера, изначально это была страница WebForms), который считывает данные из HttpContext.Request.Params, форматирует их как электронное письмо и отправляет мне, используя мой собственный почтовый сервер - но вы можете просто поместить его в базу данных, если хотите обойти всю электронную почту (я написал это с помощью электронной почты, потому что это избавило меня от написания административного бэкэнда и позволило повторно использовать мое приложение для создания контактной формы)

Другие вопросы по тегам