[c#] Invio di email in .NET tramite Gmail



Answers

La risposta sopra non funziona. Devi impostare DeliveryMethod = SmtpDeliveryMethod.Network o tornerà con un errore " client non autenticato ". Inoltre è sempre una buona idea mettere un timeout.

Codice rivisto:

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

var fromAddress = new MailAddress("from@gmail.com", "From Name");
var toAddress = new MailAddress("to@yahoo.com", "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);
}
Question

Invece di affidarmi al mio ospite per inviare email, stavo pensando di inviare i messaggi e-mail usando il mio account Gmail. Le e-mail sono e-mail personalizzate per le band che suono nel mio show. È possibile farlo?




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



Copiando da un'altra risposta , i metodi sopra funzionano ma Gmail sostituisce sempre le e-mail "da" e "rispondi a" con l'effettivo account Gmail mittente. a quanto pare c'è un lavoro intorno comunque:

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

"3. Nella scheda Account, fai clic sul link" Aggiungi un altro indirizzo email di tua proprietà "quindi verificalo"

O forse this

Aggiornamento 3: Lettore Derek Bennett afferma: "La soluzione è entrare nelle tue impostazioni di Gmail: Account e" Imposta come predefinito "un account diverso dal tuo account Gmail. Ciò causerà a Gmail di riscrivere il campo Da con qualsiasi email dell'account predefinito l'indirizzo è."




Google potrebbe bloccare i tentativi di accesso da alcune app o dispositivi che non utilizzano i moderni standard di sicurezza. Poiché queste app e questi dispositivi sono più facili da penetrare, il loro blocco aiuta a mantenere il tuo account più sicuro.

Alcuni esempi di app che non supportano i più recenti standard di sicurezza includono:

  • L'app Mail sul tuo iPhone o iPad con iOS 6 o inferiore
  • L'app Mail sul tuo telefono Windows che precede la versione 8.1
  • Alcuni client di posta Desktop come Microsoft Outlook e Mozilla Thunderbird

Pertanto, devi abilitare l'accesso meno sicuro nel tuo account google.

Dopo l'accesso all'account google, vai a:

https://myaccount.google.com/lesssecureapps
o
https://www.google.com/settings/security/lesssecureapps

In C #, puoi usare il seguente codice:

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("email@gmail.com");
    mail.To.Add("somebody@domain.com");
    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@gmail.com", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}



Modifica del mittente su email Gmail / Outlook.com:

Per evitare spoofing - Gmail / Outlook.com non ti consente di inviare da un nome account utente arbitrario.

Se disponi di un numero limitato di mittenti, puoi seguire queste istruzioni e quindi impostare il campo From a questo indirizzo: Invio di posta da un indirizzo diverso

Se desideri inviare da un indirizzo email arbitrario (ad esempio un modulo di feedback sul sito web in cui l'utente inserisce la loro email e non vuoi che ti invii direttamente via email) il meglio che puoi fare è questo:

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

Questo ti permetterebbe di colpire la "risposta" nel tuo account di posta elettronica per rispondere ai fan della tua band su una pagina di feedback, ma non riceverebbero la tua email effettiva che probabilmente porterebbe a una tonnellata di spam.

Se ti trovi in ​​un ambiente controllato, funziona molto bene, ma tieni presente che ho visto alcuni client di posta elettronica che inviano all'indirizzo di posta elettronica anche quando viene specificato il tipo di risposta (non so quale).




Il problema per me era che la mia password aveva un "\" blackstash in esso, che copiavo incollato senza rendermene conto avrebbe causato problemi.




Spero che questo codice funzioni bene. Puoi fare una prova.

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

string fromAddress = "xyz@gmail.com";
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("from@gmail.com");
//address to which mail will be sent.           
send_mail.To.Add(new MailAddress("to@example.com");
//subject of the mail.
send_mail.Subject = "put any subject here";

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






Includi questo,

using System.Net.Mail;

E poi,

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("mail-id@gmail.com","password");
client.EnableSsl = true;

client.Send(sendmsg);



http://www.systemnetmail.com/ è probabilmente il sito più assurdamente completo dedicato a un singolo spazio dei nomi .NET ... ma ha TUTTO ciò che vorresti sapere sull'invio di posta via .NET, sia ASP.NET o Desktop.

http://www.systemwebmail.com/ era l'URL originale nel post, ma non dovrebbe essere utilizzato per .NET 2.0 e versioni successive.




Se si desidera inviare e-mail in background, si prega di fare quanto segue

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

      //Place your Code here 

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

e aggiungi namespace

using System.Threading;



Related