c# send - Invio di email in.NET tramite Gmail




api example (19)

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?


Answers

Questo è per inviare e-mail con allegato .. Semplice e breve ..

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

}

Fonte : invia email in ASP.NET C #

Di seguito è riportato un esempio di codice funzionante per l'invio di una posta utilizzando C #, nell'esempio seguente sto utilizzando il server smtp di Google.

Il codice è piuttosto auto-esplicativo, sostituisci e-mail e password con i valori di e-mail e password.

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

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ò farà sì che Gmail riscriva il campo Da con qualsiasi email dell'account predefinito l'indirizzo è."


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;

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

http://www.systemnetmail.com/ è probabilmente il sito più assurdamente completo dedicato a un singolo namespace .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.


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


usare in questo modo

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

Non dimenticare questo:

using System.Net;
using System.Net.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("[email protected]","password");
client.EnableSsl = true;

client.Send(sendmsg);

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

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

Prova questo,

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

Ecco la mia versione: " Invia email in C # utilizzando 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();
     }
    }
   }
 }



Google potrebbe bloccare i tentativi di accesso da alcune app o dispositivi che non utilizzano i moderni standard di sicurezza. Dal momento che 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 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);
    }
}

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


Prova questo

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)
        { }
        catch (SmtpException ex)
        { }
        finally
        {
            mailSender = null;
            mailMessage.Dispose();
        }
        return false;
}

Ecco un metodo per inviare posta e ottenere credenziali da 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;
    }

}

E la sezione corrispondente in 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>

Questo funziona per me perfettamente bene:

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("mailto:" + address));
    startActivity(Intent.createChooser(intent, "E-mail"));




c# .net email smtp gmail