Отправка электронной почты в .NET через Gmail

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

Возможно ли это сделать?

Если вы используете ASP.Net Mvc, я бы рекомендовал взглянуть на MvcMailer: github.com/smsohan/MvcMailer/wiki/MvcMailer-Step-by-Step-Gui‌ де

noocyte 05.10.2011 11:42

пожалуйста, имейте в виду ограничения на отправителей (я надеюсь, что ваша группа достаточно успешна, чтобы это стало проблемой) support.google.com/a/bin/answer.py?hl=en&answer=166852

Simon_Weaver 08.07.2013 00:54

легкий способ здесь прочтите это. stackoverflow.com/questions/9201239/…

Joel Santos 08.10.2013 02:46

Если вы много работаете с электронной почтой, Mail4Net вам поможет. Это позволяет вам тестировать отправку электронной почты.

Karl Gjertsen 02.12.2015 11:45

Пожалуйста, посмотрите вопрос stackoverflow.com/questions/34851484/…

user5515846 19.01.2016 18:24

Все приведенные ниже в основном избыточные ответы по существу показывают вам, как отправить электронное письмо после разрешения менее безопасных приложений / устройств. Однако этого может быть недостаточно при отправке писем с рабочего сервера с другим IP или часовым поясом. Полный список сценариев и решений см. В этом ответе: stackoverflow.com/a/26709761/3440152

Christoph 15.05.2017 04:15

systemnetmail.com>, вероятно, является наиболее абсурдно полным сайтом, посвященным пространству имен Один .NET ... но на нем есть ВСЕ, что вы когда-либо хотели знать об отправке почты через .NET, будь то ASP.NET или Desktop. systemwebmail.com> был исходным URL-адресом в сообщении, но не должен использоваться для .NET 2.0 и выше.

Adam Haile 28.08.2008 17:36

Один совет! Проверьте почтовый ящик отправителя, возможно, вам нужно разрешить менее безопасные приложения. См .: google.com/settings/security/lesssecureapps

Gustavo Rossi Muller 21.07.2015 21:53

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

Satbir Kira 15.06.2015 14:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
905
9
587 792
22
Перейти к ответу Данный вопрос помечен как решенный

Ответы 22

Ответ принят как подходящий

Обязательно используйте System.Net.Mail, а не устаревший System.Web.Mail. Использование SSL с System.Web.Mail - это сплошной беспорядок из хакерских расширений.

using System.Net;
using System.Net.Mail;

var fromAddress = new MailAddress("[email protected]", "From Name");
var toAddress = new MailAddress("[email protected]", "To Name");
const string fromPassword = "fromPassword";
const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}

При создании NetworkCredential используйте fromAddress.Address, а не .ToString ()

SLaks 16.06.2009 19:52

Обратите внимание, что этот метод может пометить письмо как спам из-за SPF (если он реализован на получателе).

Noon Silk 15.08.2009 08:06

Вы по-прежнему можете получить ошибки, когда пользователь не вошел в систему, если Google просто внезапно решит, что вы отправили слишком много сообщений за последние xx минут. Вы всегда должны добавлять trySend, если он выдает ошибки, засыпает некоторое время, а затем повторите попытку.

Jason Short 26.08.2009 10:30

Интересное примечание: если вы поменяете местами UseDefaultCredentials = false и Credentials = ..., аутентификация не будет выполнена.

Nathan Wheeler 17.11.2009 19:56

Проблем с SPF этим методом не возникает. Каждый почтовый клиент может быть настроен именно на это. У вас могут возникнуть проблемы, если вы используете свой собственный сервер (то есть что-то еще, кроме smtp.gmail.com) с [email protected] в качестве отправителя. Кстати: smtp.gmail.com автоматически перезаписывает адрес отправителя, если он не ваш.

Meinersbur 18.03.2010 21:39

Gmail проверяет SPF на наличие обычной входящей почты (предназначенной для [email protected]; SMTP-сервер для этого - порт 25 aspmx.l.google.com). Хотя Gmail реализует и проверяет SPF для входящей почты, в настоящее время кажется, что он не использует его для обнаружения спама (afaik из-за жалоб пользователей, поскольку он прерывает пересылку).

Meinersbur 19.03.2010 00:50

Как отправить файл, используя приведенный выше код? Файл означает текстовый файл или какой-либо другой файл, который находится на диске C.

Ranadheer Reddy 28.05.2012 16:04

@domenic: Да. Спасибо. Я так и сделал :) отправка электронной почты с использованием C# с вложением

Ranadheer Reddy 29.05.2012 08:02

Мне было трудно заставить это работать, даже попробовав различные настройки. Как было предложено в соответствующем посте, я обнаружил, что на самом деле мой антивирус препятствовал успешной отправке электронных писем. Рассматриваемый антивирус - McAffee, и его «Защита доступа» имеет категорию «Стандартная антивирусная защита», в которой есть правило «Запретить почтовым червям массовых рассылок». Настройка / отключение этого правила заставила этот код работать для меня!

yourbuddypal 05.08.2012 21:02

На всякий случай, если кто-то наткнется на System.InvalidOperationException: SSL authentication error: RemoteCertificateNotAvailable, RemoteCertificateChainErrors, вам просто нужно установить ServicePointManager.ServerCertificateValidationCallback как здесь

PCoder 11.02.2013 19:19

Я получил ошибку типа «SMTP-серверу требуется безопасное соединение или клиент не прошел аутентификацию. Ответ сервера был: 5.5.1 Требуется аутентификация. Как я могу это решить?

Sudha 03.05.2013 13:13

Я получал сообщение об ошибке 5.5.1 Authentication Required, пока не понял, что тестирую с учетной записью (моей личной), в которой была включена двухфакторная аутентификация. Как только я использовал учетную запись, у которой ее не было, все заработало. Я также мог сгенерировать пароль для своего приложения, которое я тестировал в своем личном аккаунте, но я не хотел этого делать.

Nick DeVore 17.06.2013 20:18

@NickDeVore У меня тоже проблемы с аутентификацией, и я использую двухэтапную аутентификацию. У меня есть все вышеперечисленное, настроенное в моем web.config вместо моего контроллера, и я сгенерировал пароль для приложения (из-за двухэтапной аутентификации), но все еще получаю ошибку. Есть идеи?

J86 08.08.2014 01:27

@Ciwan Я бы сделал фальшивую учетную запись Gmail без двухфакторной аутентификации и попробовал. Если это сработает, значит, что-то с двухфакторной аутентификацией мешает ему работать.

Nick DeVore 08.08.2014 09:31

Для тех, кто борется с сообщением 5.5.1 Требуется аутентификация, убедитесь, что вы установили UseDefaultCredentials = false перед установкой значения Credentials. stackoverflow.com/a/11513412/356085

PahJoker 21.11.2014 05:29

Одна из проблем, с которыми я столкнулся при использовании Gmail таким образом, заключается в том, что при отправке автоматических писем он, кажется, молча требует более сложного пароля. Проблема, когда у вас есть тестовая учетная запись с простым паролем.

hangar 25.12.2014 23:20

Мне удалось легко отключить процесс аутентификации с помощью Gmail. Когда вы впервые отправляете электронное письмо, если вы действительно попадаете на сервер, команда Gmail отправит вам эхо-запрос, чтобы сообщить о попытке. В этом письме будет ссылка на настройку «доступ для менее безопасных приложений».

Chris 25.03.2015 16:19

Я использовал тот же код, но он все еще не работал. если кто-то сталкивается с исключением аутентификации, попробуйте stackoverflow.com/a/25414099/2649883

Silver 21.04.2015 16:29

Я использую тот же код в Консольном приложении, это ошибка "Ошибка при отправке почты."

Karthikeyan P 26.08.2015 18:01

Этот ответ не работает. Пожалуйста, посмотрите вопрос stackoverflow.com/questions/34851484/…

user5515846 19.01.2016 18:21

@ivan_petrushenko (и другие). Ответ делает работает, но для того, чтобы мое настольное приложение на C# могло использовать мою учетную запись, мне пришлось создать специальный пароль Google для этого приложения через Google> Аккаунт> Безопасность> Приложения> Управление приложениями> Добавить приложение. Это пользовательское приложение под названием «MyNameApp на настольном ПК», затем Google создал для него пароль. Я изменил учетные данные SMTP с моего пароля Gmail на недавно созданный, и он сработал ... надеюсь, что это поможет.

Karl Stephen 31.01.2016 10:51

@KarlStephen Это накладные расходы. Почему вы должны создавать пароль? Что делать, если вам нужно отправить письмо на yandex.ru или outlook.com? Это означает, что вам нужно запомнить три разных прохода и т. д. Или что, если у вас нет разрешения на изменение настроек учетной записи?

user5515846 31.01.2016 12:13

@ivan_petrushenko, потому что 1) Мне нравится политика Google о двойной проверке безопасности в моей учетной записи. Я не хочу разрешать каким-либо приложениям с низким уровнем безопасности получать доступ к моей учетной записи или использовать мой почтовый адрес для отправки любого контента кому-либо, а также использовать сложные API-интерфейсы для того, что по сути является способом отправки почты SMTP через код C#. Кстати, совсем не нужно запоминать пароль приложения, есть способы заставить приложение его запомнить. И 2) OP заявил, что речь идет об учетной записи Google. Но вы правы: чтобы он работал в большинстве случаев, включая учетные записи не Google, вам понадобится гораздо больше кода, чем указано выше. :)

Karl Stephen 31.01.2016 15:09

И здесь объясняется, какой пароль использовать, если вы включили двухфакторную аутентификацию stackoverflow.com/questions/26736062/….

Stoyan Dimov 10.03.2016 10:59

Параметр конфигурации GMAIL для разрешения менее безопасных приложений находится здесь ----> google.com/settings/security/lesssecureapps

Peter Morris 29.04.2016 21:11

Я бы предложил использовать smtp.SendMailAsync (message) .ConfigureAwait (false), чтобы вы не блокировали поток.

Gutek 30.01.2018 17:53

Согласно docs.microsoft.com, System.Net.Mail.SmtpClient класс был помечен как устаревший с сообщением «SmtpClient и его сеть типов плохо спроектированы, мы настоятельно рекомендуем вам вместо этого использовать https://github.com/jstedfast/MailKit и https://github.com/jstedfast/MimeKit».

Lance U. Matthews 01.06.2018 23:00

Пришел сюда, чтобы сказать, что сказал BACON, может @sam обновить ответ, пожалуйста? docs.microsoft.com/en-us/dotnet/api/…

Vincent Buscarello 22.02.2019 18:57

Я использовал тот же код, и он работает для меня, здесь у меня есть еще одно требование, например, как мы можем изменить почтовый адрес "подсистемы доставки почты ([email protected] на [email protected])" на настраиваемый почтовый идентификатор . Я имею в виду, что когда мы отправляем электронное письмо, давайте предположим, что письмо было отклонено (получатель недействителен) и получено сообщение с уведомлением о статусе доставки (отказ), в котором я хочу изменить адрес отправителя, например [email protected].

Venkat Nadendla 13.12.2019 12:27

Отправитель GMail должен включить небезопасные приложения: myaccount.google.com/lesssecureapps

KhaledDev 30.11.2020 13:17

Приведенный выше ответ не работает. Вы должны установить DeliveryMethod = SmtpDeliveryMethod.Network, иначе он вернется с ошибкой «клиент не был аутентифицирован». Также всегда полезно установить тайм-аут.

Обновленный код:

using System.Net.Mail;
using System.Net;

var fromAddress = new MailAddress("[email protected]", "From Name");
var toAddress = new MailAddress("[email protected]", "To Name");
const string fromPassword = "password";
const string subject = "test";
const string body = "Hey now!!";

var smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword),
    Timeout = 20000
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}

Интересно; он работает на моей машине (TM). Но поскольку это кажется правдоподобным, я добавлю это к своему ответу.

Domenic 16.03.2009 22:53

Хм, я предполагаю, что SmtpDeliveryMethod.Network используется по умолчанию, но, возможно, значение по умолчанию изменяется при работе в IIS - это то, что вы делали?

Domenic 16.03.2009 22:55

Я использую тот же код в Консольном приложении, это ошибка "Ошибка при отправке почты."

Karthikeyan P 26.08.2015 18:02

Этот ответ не работает. Пожалуйста, посмотрите вопрос stackoverflow.com/questions/34851484/…

user5515846 19.01.2016 18:22

Вот моя версия: «Отправить электронное письмо на C# с помощью Gmail».

using System;
using System.Net;
using System.Net.Mail;

namespace SendMailViaGmail
{
   class Program
   {
   static void Main(string[] args)
   {

      //Specify senders gmail address
      string SendersAddress = "[email protected]";
      //Specify The Address You want to sent Email To(can be any valid email address)
      string ReceiversAddress = "[email protected]";
      //Specify The password of gmial account u are using to sent mail(pw of [email protected])
      const string SendersPassword = "Password";
      //Write the subject of ur mail
      const string subject = "Testing";
      //Write the contents of your mail
      const string body = "Hi This Is my Mail From Gmail";

      try
      {
        //we will use Smtp client which allows us to send email using SMTP Protocol
        //i have specified the properties of SmtpClient smtp within{}
        //gmails smtp server name is smtp.gmail.com and port number is 587
        SmtpClient smtp = new SmtpClient
        {
           Host = "smtp.gmail.com",
           Port = 587,
           EnableSsl = true,
           DeliveryMethod = SmtpDeliveryMethod.Network,
           Credentials    = new NetworkCredential(SendersAddress, SendersPassword),
           Timeout = 3000
        };

        //MailMessage represents a mail message
        //it is 4 parameters(From,TO,subject,body)

        MailMessage message = new MailMessage(SendersAddress, ReceiversAddress, subject, body);
        /*WE use smtp sever we specified above to send the message(MailMessage message)*/

        smtp.Send(message);
        Console.WriteLine("Message Sent Successfully");
        Console.ReadKey();
     }

     catch (Exception ex)
     {
        Console.WriteLine(ex.Message);
        Console.ReadKey();
     }
    }
   }
 }

Хотя ваша статья может фактически ответить на вопрос, было бы предпочтительнее, чтобы включить сюда основные части ответа и предоставить ссылку для справки. Stack Overflow полезен ровно настолько, насколько полезны его вопросы и ответы, и если ваш хост блога выходит из строя или ваши URL-адреса перемещаются, этот ответ становится бесполезным. Спасибо!

sarnold 16.01.2012 10:08

Это электронное письмо с вложением .. Просто и кратко ..

источник: http://coding-issues.blogspot.in/2012/11/sending-email-with-attachments-from-c.html

using System.Net;
using System.Net.Mail;

public void email_send()
{
    MailMessage mail = new MailMessage();
    SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
    mail.From = new MailAddress("your [email protected]");
    mail.To.Add("[email protected]");
    mail.Subject = "Test Mail - 1";
    mail.Body = "mail with attachment";

    System.Net.Mail.Attachment attachment;
    attachment = new System.Net.Mail.Attachment("c:/textfile.txt");
    mail.Attachments.Add(attachment);

    SmtpServer.Port = 587;
    SmtpServer.Credentials = new System.Net.NetworkCredential("your [email protected]", "your password");
    SmtpServer.EnableSsl = true;

    SmtpServer.Send(mail);

}

Источник: Отправить электронное письмо в ASP.NET C#

Ниже приведен пример рабочего кода для отправки по электронной почте с использованием C#. В приведенном ниже примере я использую SMTP-сервер Google.

Код довольно понятен, замените адрес электронной почты и пароль на свои значения электронной почты и пароля.

public void SendEmail(string address, string subject, string message)
{
    string email = "[email protected]";
    string password = "put-your-GMAIL-password-here";

    var loginInfo = new NetworkCredential(email, password);
    var msg = new MailMessage();
    var smtpClient = new SmtpClient("smtp.gmail.com", 587);

    msg.From = new MailAddress(email);
    msg.To.Add(new MailAddress(address));
    msg.Subject = subject;
    msg.Body = message;
    msg.IsBodyHtml = true;

    smtpClient.EnableSsl = true;
    smtpClient.UseDefaultCredentials = false;
    smtpClient.Credentials = loginInfo;
    smtpClient.Send(msg);
}

Вместо var я использовал имя класса, такое как NetworkCredential, MailMessage и SmtpClient. У меня это работает.

Jui Test 28.02.2013 11:33

Это сработало для меня. Помимо всех хороших моментов, которые действительны и упомянуты выше, а также таких вещей, как безопасность Gmail, упомянутых выше. Причина, по которой это сработало, заключалась в том, что сначала нужно отключить учетные данные объекта по умолчанию, которые, вероятно, являются пустыми или оставлены пустыми ДО того, как они смогут установить свои учетные данные SmtpClient, а не ПОСЛЕ. Спасибо Ясиру Шейху.

Soliman Samir Soliman 15.09.2020 06:21

Смена отправителя в электронной почте Gmail / Outlook.com:

Чтобы предотвратить спуфинг - Gmail / Outlook.com не позволит вам отправлять сообщения с произвольным именем учетной записи пользователя.

Если у вас ограниченное количество отправителей, вы можете следовать этим инструкциям, а затем установить в поле From этот адрес: Отправка почты с другого адреса

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

        msg.ReplyToList.Add(new System.Net.Mail.MailAddress(email, friendlyName));

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

Если вы находитесь в контролируемой среде, это отлично работает, но обратите внимание, что я видел, как некоторые почтовые клиенты отправляли на адрес отправителя, даже если указан ответ (я не знаю какой).

Если вы хотите отправить фоновое электронное письмо, выполните следующие действия.

 public void SendEmail(string address, string subject, string message)
 {
 Thread threadSendMails;
 threadSendMails = new Thread(delegate()
    {

      //Place your Code here 

     });
  threadSendMails.IsBackground = true;
  threadSendMails.Start();
}

и добавить пространство имен

using System.Threading;

Вот один из способов отправки почты и получения учетных данных из web.config:

public static string SendEmail(string To, string Subject, string Msg, bool bodyHtml = false, bool test = false, Stream AttachmentStream = null, string AttachmentType = null, string AttachmentFileName = null)
{
    try
    {
        System.Net.Mail.MailMessage newMsg = new System.Net.Mail.MailMessage(System.Configuration.ConfigurationManager.AppSettings["mailCfg"], To, Subject, Msg);
        newMsg.BodyEncoding = System.Text.Encoding.UTF8;
        newMsg.HeadersEncoding = System.Text.Encoding.UTF8;
        newMsg.SubjectEncoding = System.Text.Encoding.UTF8;

        System.Net.Mail.SmtpClient smtpClient = new System.Net.Mail.SmtpClient();
        if (AttachmentStream != null && AttachmentType != null && AttachmentFileName != null)
        {
            System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment(AttachmentStream, AttachmentFileName);
            System.Net.Mime.ContentDisposition disposition = attachment.ContentDisposition;
            disposition.FileName = AttachmentFileName;
            disposition.DispositionType = System.Net.Mime.DispositionTypeNames.Attachment;

            newMsg.Attachments.Add(attachment);
        }
        if (test)
        {
            smtpClient.PickupDirectoryLocation = "C:\TestEmail";
            smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.SpecifiedPickupDirectory;
        }
        else
        {
            //smtpClient.EnableSsl = true;
        }

        newMsg.IsBodyHtml = bodyHtml;
        smtpClient.Send(newMsg);
        return SENT_OK;
    }
    catch (Exception ex)
    {

        return "Error: " + ex.Message
             + "<br/><br/>Inner Exception: "
             + ex.InnerException;
    }

}

И соответствующий раздел в web.config:

<appSettings>
    <add key = "mailCfg" value = "[email protected]"/>
</appSettings>
<system.net>
  <mailSettings>
    <smtp deliveryMethod = "Network" from = "[email protected]">
      <network defaultCredentials = "false" host = "mail.exapmple.com" userName = "[email protected]" password = "your_password" port = "25"/>
    </smtp>
  </mailSettings>
</system.net>

Включите это,

using System.Net.Mail;

А потом,

MailMessage sendmsg = new MailMessage(SendersAddress, ReceiversAddress, subject, body); 
SmtpClient client = new SmtpClient("smtp.gmail.com");

client.Port = Convert.ToInt16("587");
client.Credentials = new System.Net.NetworkCredential("[email protected]","password");
client.EnableSsl = true;

client.Send(sendmsg);

Надеюсь, этот код будет работать нормально. Вы можете попробовать.

// Include this.                
using System.Net.Mail;

string fromAddress = "[email protected]";
string mailPassword = "*****";       // Mail id password from where mail will be sent.
string messageBody = "Write the body of the message here.";


// Create smtp connection.
SmtpClient client = new SmtpClient();
client.Port = 587;//outgoing port for the mail.
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
client.Timeout = 10000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential(fromAddress, mailPassword);


// Fill the mail form.
var send_mail = new MailMessage();

send_mail.IsBodyHtml = true;
//address from where mail will be sent.
send_mail.From = new MailAddress("[email protected]");
//address to which mail will be sent.           
send_mail.To.Add(new MailAddress("[email protected]");
//subject of the mail.
send_mail.Subject = "put any subject here";

send_mail.Body = messageBody;
client.Send(send_mail);

сообщение send_mail = новое MailMessage (); Как эта линия должна работать? Вы не можете неявно преобразовать System.Net.Mail.MailMessage в System.Windows.Forms.Message.

Debaprasad 18.03.2014 10:23

Чтобы заставить его работать, мне пришлось включить свою учетную запись gmail, чтобы другие приложения могли получить доступ. Это делается с помощью параметра «Включить менее безопасные приложения» и также по этой ссылке: https://accounts.google.com/b/0/DisplayUnlockCaptcha

Этот ответ должен быть первым.

Cute Bear 06.09.2020 23:26

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

Вот некоторые примеры приложений, не поддерживающих новейшие стандарты безопасности:

  • Приложение "Почта" на вашем iPhone или iPad с iOS 6 или более ранней версии
  • Приложение Mail на вашем телефоне с Windows до версии 8.1
  • Некоторые почтовые клиенты для настольных ПК, такие как Microsoft Outlook и Mozilla Thunderbird

Следовательно, вы должны включить Менее безопасный вход в своей учетной записи Google.

После входа в учетную запись Google перейдите по ссылке:

https://myaccount.google.com/lesssecureapps
или
https://www.google.com/settings/security/lesssecureapps

В C# вы можете использовать следующий код:

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("[email protected]");
    mail.To.Add("[email protected]");
    mail.Subject = "Hello World";
    mail.Body = "<h1>Hello</h1>";
    mail.IsBodyHtml = true;
    mail.Attachments.Add(new Attachment("C:\file.zip"));

    using (SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587))
    {
        smtp.Credentials = new NetworkCredential("[email protected]", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}

У меня была такая же проблема, но она была решена путем перехода к настройкам безопасности Gmail и Разрешение менее безопасных приложений. Код от Доменика и Донни работает, но только если вы включили этот параметр

Если вы вошли в систему (в Google), вы можете перейти по ссылке это и переключить "Включать" на «Доступ для менее безопасных приложений»

используйте этот способ

MailMessage sendmsg = new MailMessage(SendersAddress, ReceiversAddress, subject, body); 
SmtpClient client = new SmtpClient("smtp.gmail.com");

client.Port = Convert.ToInt32("587");
client.EnableSsl = true;
client.Credentials = new System.Net.NetworkCredential("[email protected]","MyPassWord");
client.Send(sendmsg);

Не забывайте об этом:

using System.Net;
using System.Net.Mail;

Чтобы другие ответы работали «с сервера», сначала Включите доступ для менее безопасных приложений в учетной записи Gmail.

Похоже, недавно Google изменил свою политику безопасности. Ответ с наивысшим рейтингом больше не работает, пока вы не измените настройки своей учетной записи, как описано здесь: https://support.google.com/accounts/answer/6010255?hl=en-GB

По состоянию на март 2016 года Google снова изменил расположение настроек!

Это сработало для меня. И это тоже касается. Не уверен, что хочу отключить эту безопасность. Возможно, придется переосмыслить ...

Sully 13.04.2016 15:41

С точки зрения безопасности лучше включить двухэтапную аутентификацию, а затем сгенерировать и использовать пароль приложения - см. Как отправить электронное письмо в .Net в соответствии с новыми политиками безопасности?

Michael Freidgeim 05.06.2016 15:57

@BCS Software, в моей программе, пользователь вставляет любое электронное письмо, которое моя программа должна использовать для отправки сообщения. Итак, как я могу заставить пользователя электронной почты отправлять электронную почту, даже если включена двухфакторная аутентификация?

Alaa' 18.01.2018 16:44

Это тот же параметр, который вам нужно изменить, если вы хотите использовать клиент Microsoft Outlook (на настольном компьютере, мобильном телефоне и т. д.) Для отправки / получения электронных писем через Google GMail.

Brett Rigby 23.04.2019 13:44

Это помогло мне. Но не забудьте вернуть его как можно быстрее :)

Andrei Bazanov 06.10.2020 12:10

using System;
using System.Net;
using System.Net.Mail;

namespace SendMailViaGmail
{
   class Program
   {
   static void Main(string[] args)
   {

      //Specify senders gmail address
      string SendersAddress = "[email protected]";
      //Specify The Address You want to sent Email To(can be any valid email address)
      string ReceiversAddress = "[email protected]";
      //Specify The password of gmial account u are using to sent mail(pw of [email protected])
      const string SendersPassword = "Password";
      //Write the subject of ur mail
      const string subject = "Testing";
      //Write the contents of your mail
      const string body = "Hi This Is my Mail From Gmail";

      try
      {
        //we will use Smtp client which allows us to send email using SMTP Protocol
        //i have specified the properties of SmtpClient smtp within{}
        //gmails smtp server name is smtp.gmail.com and port number is 587
        SmtpClient smtp = new SmtpClient
        {
           Host = "smtp.gmail.com",
           Port = 587,
           EnableSsl = true,
           DeliveryMethod = SmtpDeliveryMethod.Network,
           Credentials = new NetworkCredential(SendersAddress, SendersPassword),
           Timeout = 3000
        };

        //MailMessage represents a mail message
        //it is 4 parameters(From,TO,subject,body)

        MailMessage message = new MailMessage(SendersAddress, ReceiversAddress, subject, body);
        /*WE use smtp sever we specified above to send the message(MailMessage message)*/

        smtp.Send(message);
        Console.WriteLine("Message Sent Successfully");
        Console.ReadKey();
     }
     catch (Exception ex)
     {
        Console.WriteLine(ex.Message);
        Console.ReadKey();
     }
}
}
}

Попробуй это

public static bool Send(string receiverEmail, string ReceiverName, string subject, string body)
{
        MailMessage mailMessage = new MailMessage();
        MailAddress mailAddress = new MailAddress("[email protected]", "Sender Name"); // [email protected] = input Sender Email Address 
        mailMessage.From = mailAddress;
        mailAddress = new MailAddress(receiverEmail, ReceiverName);
        mailMessage.To.Add(mailAddress);
        mailMessage.Subject = subject;
        mailMessage.Body = body;
        mailMessage.IsBodyHtml = true;

        SmtpClient mailSender = new SmtpClient("smtp.gmail.com", 587)
        {
            EnableSsl = true,
            UseDefaultCredentials = false,
            DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
            Credentials = new NetworkCredential("[email protected]", "pass")   // [email protected] = input sender email address  
                                                                           //pass = sender email password
        };

        try
        {
            mailSender.Send(mailMessage);
            return true;
        }
        catch (SmtpFailedRecipientException ex)
        { 
          // Write the exception to a Log file.
        }
        catch (SmtpException ex)
        { 
           // Write the exception to a Log file.
        }
        finally
        {
            mailSender = null;
            mailMessage.Dispose();
        }
        return false;
}

Попробуй это,

    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");

            mail.From = new MailAddress("[email protected]");
            mail.To.Add("to_address");
            mail.Subject = "Test Mail";
            mail.Body = "This is for testing SMTP mail from GMAIL";

            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("username", "password");
            SmtpServer.EnableSsl = true;

            SmtpServer.Send(mail);
            MessageBox.Show("mail Send");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

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

http://karmic-development.blogspot.in/2013/10/send-email-from-aspnet-using-gmail-as.html

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

Или, возможно, это

Обновление 3: читатель Дерек Беннетт говорит: «Решение состоит в том, чтобы войти в настройки Gmail: учетные записи и« Сделать по умолчанию »учетную запись, отличную от вашей учетной записи Gmail. Это заставит Gmail переписать поле« От »с любым адресом электронной почты учетной записи по умолчанию. адрес."

Можете попробовать Mailkit. Это дает вам лучшую и расширенную функциональность для отправки почты. Вы можете найти больше в это Вот пример

    MimeMessage message = new MimeMessage();
    message.From.Add(new MailboxAddress("FromName", "[email protected]"));
    message.To.Add(new MailboxAddress("ToName", "[email protected]"));
    message.Subject = "MyEmailSubject";

    message.Body = new TextPart("plain")
    {
        Text = @"MyEmailBodyOnlyTextPart"
    };

    using (var client = new SmtpClient())
    {
        client.Connect("SERVER", 25); // 25 is port you can change accordingly

        // Note: since we don't have an OAuth2 token, disable
        // the XOAUTH2 authentication mechanism.
        client.AuthenticationMechanisms.Remove("XOAUTH2");

        // Note: only needed if the SMTP server requires authentication
        client.Authenticate("YOUR_USER_NAME", "YOUR_PASSWORD");

        client.Send(message);
        client.Disconnect(true);
    }

Чтобы избежать проблем с безопасностью в Gmail, вы должны сначала сгенерировать пароль приложения в настройках Gmail, и вы можете использовать этот пароль вместо реального пароля для отправки электронного письма, даже если вы используете двухэтапную проверку.

How to Set App-specific password for gmail

Если ваш пароль Google не работает, вам может потребоваться создать пароль для конкретного приложения для Gmail в Google. https://support.google.com/accounts/answer/185833?hl=en

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