953 votes

Envoyer des e-mails en .NET via Gmail

Au lieu de m'en remettre à mon hôte pour l'envoi d'un courriel, je pensais envoyer les messages électroniques à l'aide de ma carte de crédit. Gmail compte. Les courriels sont des courriels personnalisés adressés aux groupes que je fais jouer dans mon émission.

Est-il possible de le faire ?

13 votes

Si vous utilisez ASP.Net Mvc, je vous recommande de jeter un coup d'œil à MvcMailer : github.com/smsohan/MvcMailer/wiki/MvcMailer-Step-by-Step-Guide

0 votes

Veuillez tenir compte des limites d'envoi (j'espère que votre groupe a suffisamment de succès pour que cela soit un problème). support.google.com/a/bin/answer.py?hl=en&answer=166852

0 votes

Un moyen facile de le lire ici. stackoverflow.com/questions/9201239/

1156voto

Domenic Points 40761

Veillez à utiliser System.Net.Mail et non la version obsolète System.Web.Mail . Faire du SSL avec System.Web.Mail est un désordre grossier d'extensions bricolées.

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

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

En outre, rendez-vous sur le site Compte Google > Sécurité et regardez la page Connexion à Google > Vérification en deux étapes réglage.

  • Si elle est activée, vous devez générer un mot de passe permettant à .NET de contourner la vérification en deux étapes. Pour ce faire, cliquez sur Connexion à Google > Mots de passe des applications sélectionnez l'application = Mail, et le périphérique = ordinateur Windows, et enfin générez le mot de passe. Utilisez le mot de passe généré dans le fromPassword à la place de votre mot de passe Gmail standard.
  • S'il est désactivé, vous devez activer la fonction Accès aux applications moins sécurisé ce qui n'est pas recommandé ! Il est donc préférable d'activer la vérification en deux étapes.

2 votes

Lors de la construction du NetworkCredential, utilisez fromAddress.Address et non .ToString().

0 votes

Notez que cette méthode peut entraîner le marquage de l'e-mail comme spam, en raison du SPF (s'il est mis en œuvre chez le destinataire).

54 votes

Vous pouvez toujours obtenir des erreurs d'utilisateur non connecté si Google décide soudainement que vous avez envoyé trop de messages au cours des xx dernières minutes. Vous devez toujours ajouter un trySend, si l'erreur survient, attendez un peu, puis réessayez.

166voto

Donny V. Points 4229

La réponse ci-dessus ne fonctionne pas. Vous devez définir DeliveryMethod = SmtpDeliveryMethod.Network ou il reviendra avec un " le client n'a pas été authentifié erreur ". C'est aussi une bonne idée de prévoir un délai d'attente.

Code révisé :

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

3 votes

Intéressant ; cela fonctionne sur ma machine (TM). Mais comme cela semble plausible, je l'ajoute à ma réponse.

3 votes

Hmm, je pense que SmtpDeliveryMethod.Network est la valeur par défaut, mais peut-être que la valeur par défaut est modifiée lorsqu'elle est exécutée dans IIS - est-ce ce que vous faisiez ?

3 votes

J'utilise le même code dans l'application Console, il y a une erreur. "Échec de l'envoi du courrier."

65voto

Adam Haile Points 12576

http://www.systemnetmail.com/ est probablement le site le plus absurdement complet consacré à une simple NET... mais il contient TOUT ce que vous pouvez souhaiter savoir sur l'envoi de courrier via .NET, que ce soit en ASP.NET ou sur le bureau.

http://www.systemwebmail.com/ était l'URL originale de l'article, mais ne doit pas être utilisée pour .NET 2.0 et plus.

45voto

K.R.R Points 999

Il s'agit d'envoyer un email avec des pièces jointes Simple et court

source : 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 mail@gmail.com");
    mail.To.Add("to_mail@gmail.com");
    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 mail@gmail.com", "your password");
    SmtpServer.EnableSsl = true;

    SmtpServer.Send(mail);

}

16voto

Premdeep Mohanty Points 661

J'espère que ce code fonctionnera bien. Vous pouvez l'essayer.

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

2 votes

Message send_mail = new MailMessage() ; Comment cette ligne est-elle censée fonctionner ? Vous ne pouvez pas convertir implicitement 'System.Net.Mail.MailMessage' en 'System.Windows.Forms.Message'.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X