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

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

Ответ 1

Обязательно используйте 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);
}

Ответ 2

Вышеприведенный ответ не работает. Вы должны установить 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);
}

Ответ 3

Для других ответов на работу "с сервера" сначала включите " Включение доступа" для менее безопасных приложений в учетной записи gmail.

Похоже, что недавно Google изменила политику безопасности. Максимальный ответ больше не работает, пока вы не измените настройки своей учетной записи, как описано здесь: https://support.google.com/accounts/answer/6010255?hl=ru-RU enter image description here

enter image description here

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

Ответ 4

http://www.systemnetmail.com/ - это, пожалуй, самый абсурдно полный сайт, посвященный одному пространству имен .NET... но у него есть ВСЕ, что вы когда-нибудь захотите знать о отправке почты через .NET, будь то ASP.NET или Desktop.

http://www.systemwebmail.com/ был исходным URL-адресом в сообщении, но не должен использоваться для .NET 2.0 и выше.

Ответ 5

Это для отправки электронной почты с прикреплением. Простой и короткий.

источник: 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);

}

Ответ 6

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

Некоторые примеры приложений, которые не поддерживают новейшие стандарты безопасности, включают в себя:

  • Приложение Mail на вашем 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

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

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);
    }
}

Ответ 7

Вот моя версия: " Отправить письмо в С# с помощью 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();
     }
    }
   }
 }

Ответ 8

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

Ответ 9

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

// 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);

Ответ 10

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

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);

Ответ 11

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

Ниже приведен пример рабочего кода для отправки по почте с использованием С#, в приведенном ниже примере я использую сервер smtp googles.

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

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);
}

Ответ 12

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

 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;

Ответ 13

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

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;

Ответ 14

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

Ответ 15

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

    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());
        }
    }

Ответ 16

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

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

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

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

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

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

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

Ответ 17

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

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

Ответ 18

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();
     }
}
}
}

Ответ 19

Вот один из способов отправки почты и получения учетных данных из 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>

Ответ 20

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

Ответ 21

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

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;
}

Ответ 22

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

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

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

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

Обновление 3: Reader Derek Bennett говорит: "Решение заключается в том, чтобы перейти в настройки Gmail: учетные записи и" Сделать по умолчанию "учетную запись, отличную от вашей учетной записи gmail. Это заставит gmail переписать поле" От "с любым почтовым адресом электронной почты по умолчанию адрес."

Ответ 23

Вы можете попробовать 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);
    }

Ответ 24

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