web-dev-qa-db-fra.com

Envoyer un e-mail à l'aide de System.Net.Mail via gmail

Je souhaite envoyer un e-mail via le serveur gmail. J'ai mis le code suivant mais il se bloque lors de l'envoi. Toute idée s'il vous plaît ....

MailMessage mail = new MailMessage();

        mail.From = new System.Net.Mail.MailAddress("[email protected]");

        //create instance of smtpclient
        SmtpClient smtp = new SmtpClient();
        smtp.Port = 465;
        smtp.UseDefaultCredentials = true;

        smtp.Host = "smtp.gmail.com";            

        smtp.EnableSsl = true;

        //recipient address
        mail.To.Add(new MailAddress("[email protected]"));

        //Formatted mail body
        mail.IsBodyHtml = true;
        string st = "Test";

        mail.Body = st;
        smtp.Send(mail);

Xxxx.com est un domaine de messagerie dans les applications Google. Merci...

54
JCTLK
MailMessage mail = new MailMessage();
mail.From = new System.Net.Mail.MailAddress("[email protected]");

// The important part -- configuring the SMTP client
SmtpClient smtp = new SmtpClient();
smtp.Port = 587;   // [1] You can try with 465 also, I always used 587 and got success
smtp.EnableSsl = true;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network; // [2] Added this
smtp.UseDefaultCredentials = false; // [3] Changed this
smtp.Credentials = new NetworkCredential(mail.From,  "password_here");  // [4] Added this. Note, first parameter is NOT string.
smtp.Host = "smtp.gmail.com";            

//recipient address
mail.To.Add(new MailAddress("[email protected]"));

//Formatted mail body
mail.IsBodyHtml = true;
string st = "Test";

mail.Body = st;
smtp.Send(mail);
78
Sarwar Erfan

J'ai essayé le code C # ci-dessus pour envoyer des messages de Gmail à mon ID d'entreprise. Lors de l'exécution de l'application, le contrôle s'est arrêté indéfiniment à l'instruction smtp.Send(mail);

Pendant la recherche sur Google, je suis tombé sur un similaire code , qui a fonctionné pour moi. Je poste ce code ici.

class GMail
{
    public void SendMail()
    {  
        string pGmailEmail = "[email protected]";
        string pGmailPassword = "GmailPassword";
        string pTo = "ToAddress"; //[email protected]
        string pSubject = "Test From Gmail";
        string pBody = "Body"; //Body
        MailFormat pFormat = MailFormat.Text; //Text Message
        string pAttachmentPath = string.Empty; //No Attachments

        System.Web.Mail.MailMessage myMail = new System.Web.Mail.MailMessage();
        myMail.Fields.Add
            ("http://schemas.Microsoft.com/cdo/configuration/smtpserver",
                          "smtp.gmail.com");
        myMail.Fields.Add
            ("http://schemas.Microsoft.com/cdo/configuration/smtpserverport",
                          "465");
        myMail.Fields.Add
            ("http://schemas.Microsoft.com/cdo/configuration/sendusing",
                          "2");
        //sendusing: cdoSendUsingPort, value 2, for sending the message using 
        //the network.

        //smtpauthenticate: Specifies the mechanism used when authenticating 
        //to an SMTP 
        //service over the network. Possible values are:
        //- cdoAnonymous, value 0. Do not authenticate.
        //- cdoBasic, value 1. Use basic clear-text authentication. 
        //When using this option you have to provide the user name and password 
        //through the sendusername and sendpassword fields.
        //- cdoNTLM, value 2. The current process security context is used to 
        // authenticate with the service.
        myMail.Fields.Add
        ("http://schemas.Microsoft.com/cdo/configuration/smtpauthenticate", "1");
        //Use 0 for anonymous
        myMail.Fields.Add
        ("http://schemas.Microsoft.com/cdo/configuration/sendusername",
            pGmailEmail);
        myMail.Fields.Add
        ("http://schemas.Microsoft.com/cdo/configuration/sendpassword",
             pGmailPassword);
        myMail.Fields.Add
        ("http://schemas.Microsoft.com/cdo/configuration/smtpusessl",
             "true");
        myMail.From = pGmailEmail;
        myMail.To = pTo;
        myMail.Subject = pSubject;
        myMail.BodyFormat = pFormat;
        myMail.Body = pBody;
        if (pAttachmentPath.Trim() != "")
        {
            MailAttachment MyAttachment =
                    new MailAttachment(pAttachmentPath);
            myMail.Attachments.Add(MyAttachment);
            myMail.Priority = System.Web.Mail.MailPriority.High;
        }

        SmtpMail.SmtpServer = "smtp.gmail.com:465";
        SmtpMail.Send(myMail);
    }
}
13
AbrahamJP

Définissez smtp.UseDefaultCredentials = false et utilisez smtp.Credentials = new NetworkCredential (gMailAccount, password);

7
saokat

Je me rends compte que c'est une réponse à une très vieille question, avec beaucoup d'autres bonnes réponses. Je publie ce code pour inclure certains des commentaires utiles publiés par d'autres utilisateurs tels que Utilisation d'instructions et des méthodes plus récentes où certaines réponses ont des méthodes obsolètes. Ce code a été testé et fonctionne depuis le 11 juillet 2018.

Si vous envoyez via votre compte GMail, assurez-vous que Autoriser les applications moins sécurisées est activé depuis votre panneau de commande

Code de classe C #:

public class Email
{
public void NewHeadlessEmail(string fromEmail, string password, string toAddress, string subject, string body)
{
    using (System.Net.Mail.MailMessage myMail = new System.Net.Mail.MailMessage())
    {
        myMail.From = new MailAddress(fromEmail);
        myMail.To.Add(toAddress);
        myMail.Subject = subject;
        myMail.IsBodyHtml = true;
        myMail.Body = body;

        using (System.Net.Mail.SmtpClient s = new System.Net.Mail.SmtpClient("smtp.gmail.com", 587))
        {
            s.DeliveryMethod = SmtpDeliveryMethod.Network;
            s.UseDefaultCredentials = false;
            s.Credentials = new System.Net.NetworkCredential(myMail.From.ToString(), password);
            s.EnableSsl = true;
            s.Send(myMail);
        }
    }
}
}

Code de classe VB:

Public Class Email    
Sub NewHeadlessEmail(fromEmail As String, password As String, toAddress As String, subject As String, body As String)
        Using myMail As System.Net.Mail.MailMessage = New System.Net.Mail.MailMessage()
            myMail.From = New MailAddress(fromEmail)
            myMail.To.Add(toAddress)
            myMail.Subject = subject
            myMail.IsBodyHtml = True
            myMail.Body = body

            Using s As New Net.Mail.SmtpClient("smtp.gmail.com", 587)
                s.DeliveryMethod = SmtpDeliveryMethod.Network
                s.UseDefaultCredentials = False
                s.Credentials = New Net.NetworkCredential(myMail.From.ToString(), password)
                s.EnableSsl = True
                s.Send(myMail)
            End Using

        End Using
    End Sub
End Class

C # d'utilisation:

{
Email em = new Email();
em.NewHeadlessEmail("[email protected]", "password", "[email protected]", "Subject Text", "Body Text");
}

Utilisation VB:

Dim em As New Email
em.NewHeadlessEmail("[email protected]", "password", "[email protected]", "Subject Text", "Body Text")
2
Dave B

Cela a fonctionné pour moi:

        MailMessage message = new MailMessage("[email protected]", toemail, subjectEmail, comments);
        message.IsBodyHtml = true;

        try {
            SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
            client.Timeout = 2000;
            client.EnableSsl = true;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            //client.Credentials = CredentialCache.DefaultNetworkCredentials;
            client.UseDefaultCredentials = false;
            client.Credentials = new System.Net.NetworkCredential("[email protected]", "mypassord");
            client.Send(message);

            message.Dispose();
            client.Dispose();
        }
        catch (Exception ex) {
            Debug.WriteLine(ex.Message);
        }

MAIS (au moment de la rédaction de cet article - octobre 2017)

Vous devez ACTIVER "Autoriser les applications moins sécurisées" dans l'option "Applications avec accès au compte" dans les paramètres de sécurité/confidentialité de Google "Mon compte" ( https://myaccount.google.com )

2
BernieSF

Utilisez le numéro de port 587

Avec le code suivant, cela fonctionnera correctement.

MailMessage mail = new MailMessage();
mail.From = new MailAddress("[email protected]", "Enquiry");
mail.To.Add("[email protected]");
mail.IsBodyHtml = true;
mail.Subject = "Registration";
mail.Body = "Some Text";
mail.Priority = MailPriority.High;

SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
//smtp.UseDefaultCredentials = true;
smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "<my gmail pwd>");
smtp.EnableSsl = true;
//smtp.DeliveryMethod = SmtpDeliveryMethod.Network;

smtp.Send(mail);

Mais, il y a un problème avec l'utilisation de gmail. L'e-mail sera envoyé avec succès, mais la boîte de réception du destinataire aura l'adresse gmail dans "l'adresse de l'expéditeur" au lieu de "l'adresse de l'expéditeur" mentionnée dans le code.

Pour résoudre ce problème, veuillez suivre les étapes mentionnées sur le lien suivant.

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

avant de suivre toutes les étapes ci-dessus, vous devez authentifier votre compte gmail pour autoriser l'accès à votre application et également aux appareils. Veuillez vérifier toutes les étapes pour l'authentification du compte sur le lien suivant:

http://karmic-development.blogspot.in/2013/11/allow-account-access-ilst-sending.html

1
Munjal Pandya
    ActiveUp.Net.Mail.SmtpMessage smtpmsg = new ActiveUp.Net.Mail.SmtpMessage();
    smtpmsg.From.Email = "[email protected]";
    smtpmsg.To.Add(To);
    smtpmsg.Bcc.Add("[email protected]");
    smtpmsg.Subject = Subject;
    smtpmsg.BodyText.Text = Body;

    smtpmsg.Send("mail.test.com", "[email protected]", "user@1234", ActiveUp.Net.Mail.SaslMechanism.Login);
0
vijay