Отправка электронной почты в .NET через Gmail - PullRequest
821 голосов
/ 28 августа 2008

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

Ответы [ 22 ]

6 голосов
/ 23 июля 2013

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

 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;
4 голосов
/ 09 июля 2015

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

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("mail-id@gmail.com","MyPassWord");
client.Send(sendmsg);

Не забудьте:

using System.Net;
using System.Net.Mail;
4 голосов
/ 31 января 2017

Попробуйте,

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

            mail.From = new MailAddress("your_email_address@gmail.com");
            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());
        }
    }
4 голосов
/ 21 июля 2015

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

3 голосов
/ 25 июня 2015

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

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

3 голосов
/ 08 июля 2013

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

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

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

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

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

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

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

3 голосов
/ 10 октября 2015
using System;
using System.Net;
using System.Net.Mail;

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

      //Specify senders gmail address
      string SendersAddress = "Sendersaddress@gmail.com";
      //Specify The Address You want to sent Email To(can be any valid email address)
      string ReceiversAddress = "ReceiversAddress@yahoo.com";
      //Specify The password of gmial account u are using to sent mail(pw of sender@gmail.com)
      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();
     }
}
}
}
2 голосов
/ 08 октября 2013

Вот один из способов отправки почты и получения учетных данных из 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="yourmail@example.com"/>
</appSettings>
<system.net>
  <mailSettings>
    <smtp deliveryMethod="Network" from="yourmail@example.com">
      <network defaultCredentials="false" host="mail.exapmple.com" userName="yourmail@example.com" password="your_password" port="25"/>
    </smtp>
  </mailSettings>
</system.net>
1 голос
/ 22 марта 2018

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

http://karmic -development.blogspot.in / 2013/10 / отправить электронную почту-из-сети САШ, использующих-Gmail-as.html

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

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

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

1 голос
/ 27 февраля 2016

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

public static bool Send(string receiverEmail, string ReceiverName, string subject, string body)
{
        MailMessage mailMessage = new MailMessage();
        MailAddress mailAddress = new MailAddress("abc@gmail.com", "Sender Name"); // abc@gmail.com = 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("abc@gmail.com", "pass")   // abc@gmail.com = input sender email address  
                                                                           //pass = sender email password
        };

        try
        {
            mailSender.Send(mailMessage);
            return true;
        }
        catch (SmtpFailedRecipientException ex)
        { }
        catch (SmtpException ex)
        { }
        finally
        {
            mailSender = null;
            mailMessage.Dispose();
        }
        return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...