Как отправить письмо из программы на C # - PullRequest
0 голосов
/ 19 сентября 2019

Я хотел бы добавить функциональность электронной почты в программу WinForm, которую я пишу на C #.У меня есть приложение для Android с функцией электронной почты.Он настраивает электронную почту, но затем позволяет пользователю выбрать программу электронной почты и т. Д. Как только это будет выбрано, тело письма будет завершено.Но выбор состоит в том, чтобы выбрать, какое приложение электронной почты они хотят использовать.

Я бы хотел сделать то же самое в Windows, но я не понимаю, как это сделать.Я пробовал следующее (на основе других вопросов и ответов здесь):

        _from = new MailAddress("my email address", "xxxx");
        _to = new MailAddress("xxxx3333@gmail.com", "yyyy");
        SmtpClient smtp = new SmtpClient("smtp.gmail.com"); 
        smtp.UseDefaultCredentials = true;
        smtp.Port = 587; 
        smtp.EnableSsl = true;
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp msgMail = new MailMessage();
        smtp.Body = text; 
        msgMail.Subject = "Subject";
        msgMail.From = _from;
        msgMail.To.Add(_to); 
        smtp.EnableSsl = true;
        msgMail.Subject = _subject;
        msgMail.Body = Text;
        msgMail.IsBodyHtml = false;
        try
        {
            mailClient.Send(msgMail);
        }
        catch (Exception ex)
        {
            string msg = "Exception caught in sending the email: " + ex.ToString();
            showMessage(msg);
        }

        msgMail.Dispose();

Но я получаю:

SMTP-сервер требует безопасного соединения или клиент не был аутентифицирован,Ответ сервера был: 5.5.1 Требуется аутентификация.

При использовании аналогичного кода в Android моя программа просто получает форму электронной почты, но позволяет пользователю решать, какое добавление электронной почты они будут использовать.

Есть ли способ сделать это в Windows?

Здесь есть почти идентичный вопрос и ответ:

C # Windows Form Application - отправка электронной почты с помощью gmail smtp

И я думаю, что следовал этому, но ... не работает.

Ответы [ 3 ]

2 голосов
/ 19 сентября 2019

Чтобы прямо ответить на ваш вопрос - вы, вероятно, не включили менее безопасные приложения в используемой учетной записи gmail.


В противном случае вы можете исследовать синтаксисmailto, если вы хотите, чтобы пользователь выбрал почтовый клиент для отправки электронной почты: https://www.labnol.org/internet/email/learn-mailto-syntax/6748/

По ссылке:

Отправьте электронное письмо Бараку Обаме стема «Поздравляю Обаму» и некоторый текст в теле сообщения электронной почты

<a href=”mailto:obama@whitehouse.gov? 
subject=Congrats%20Obama&body=Enjoy%20your%20stay%0ARegards%20″>

Это не имеет прямого отношения к C # / Windows - но я знаю, что ввод mailto:someone@somewhere.com при запускеподсказка работает:

enter image description here

Предположительно, тогда вы могли бы сделать что-то вроде: (не проверено)

Process.Run("mailto:someone@somewhere.com");
1 голос
/ 19 сентября 2019

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

Заменить:

smtp.UseDefaultCredentials = true;

С:

smtp.Credentials = new System.Net.NetworkCredential ("yourusername", "yourpassword");

Это должно сделатьобмануть.

0 голосов
/ 19 сентября 2019

Возможно, вы забыли в своем коде добавить хост

Попробуйте использовать это:

SmtpClient smtp = new SmtpClient ();

smtp.UseDefaultCredentials = true;

smtp.Host = "SRVMAIL";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...