Au lieu de compter sur mon hôte pour envoyer un e-mail, je pensais envoyer les e-mails à l'aide de mon compte Gmail . Les courriels sont des courriels personnalisés aux groupes que je joue sur mon émission.
Est-il possible de le faire?
Au lieu de compter sur mon hôte pour envoyer un e-mail, je pensais envoyer les e-mails à l'aide de mon compte Gmail . Les courriels sont des courriels personnalisés aux groupes que je joue sur mon émission.
Est-il possible de le faire?
Réponses:
Assurez-vous d'utiliser System.Net.Mail
, pas le déprécié System.Web.Mail
. Faire SSL avec System.Web.Mail
est un gros gâchis d'extensions hacky.
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);
}
smtp.gmail.com
) avec something@gmail.com
comme expéditeur. Btw: smtp.gmail.com
écrase automatiquement l'adresse de l'expéditeur si ce n'est pas la vôtre.
La réponse ci-dessus ne fonctionne pas. Vous devez définir DeliveryMethod = SmtpDeliveryMethod.Network
ou il reviendra avec une erreur "le client n'a pas été authentifié ". De plus, c'est toujours une bonne idée de mettre un temps mort.
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);
}
Pour que les autres réponses fonctionnent "à partir d'un serveur", activez d' abord l' accès pour les applications moins sécurisées dans le compte gmail.
Il semble que Google ait récemment modifié sa politique de sécurité. La réponse la mieux notée ne fonctionne plus tant que vous n'avez pas modifié les paramètres de votre compte comme décrit ici: https://support.google.com/accounts/answer/6010255?hl=en-GB
Depuis mars 2016, google a de nouveau modifié l'emplacement du paramètre!
Il s'agit d'envoyer un e-mail avec pièce jointe .. 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);
}
Google peut bloquer les tentatives de connexion de certaines applications ou appareils qui n'utilisent pas les normes de sécurité modernes. Étant donné que ces applications et appareils sont plus faciles à pénétrer, leur blocage permet de sécuriser votre compte.
Voici quelques exemples d'applications qui ne prennent pas en charge les dernières normes de sécurité:
Par conséquent, vous devez activer la connexion moins sécurisée dans votre compte Google.
Une fois connecté à votre compte Google, accédez à:
https://myaccount.google.com/lesssecureapps
ou
https://www.google.com/settings/security/lesssecureapps
En C #, vous pouvez utiliser le code suivant:
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);
}
}
Pour que je puisse le faire fonctionner, j'ai dû activer mon compte gmail afin que d'autres applications puissent y accéder. Cela se fait avec "activer les applications moins sécurisées" et également en utilisant ce lien: https://accounts.google.com/b/0/DisplayUnlockCaptcha
Voici ma version: " Envoyer un e-mail en C # à l'aide de 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 = "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();
}
}
}
}
J'espère que ce code fonctionnera bien. Tu peux 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);
Incluez ceci,
using System.Net.Mail;
Et alors,
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);
Source : Envoyer un e-mail en ASP.NET C #
Vous trouverez ci-dessous un exemple de code de travail pour l'envoi d'un courrier en utilisant C #, dans l'exemple ci-dessous, j'utilise le serveur smtp de google.
Le code est assez explicite, remplacez l'email et le mot de passe par vos valeurs d'email et de mot de passe.
public void SendEmail(string address, string subject, string message)
{
string email = "yrshaikh.mail@gmail.com";
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);
}
Si vous souhaitez envoyer un e-mail en arrière-plan, veuillez faire ce qui suit
public void SendEmail(string address, string subject, string message)
{
Thread threadSendMails;
threadSendMails = new Thread(delegate()
{
//Place your Code here
});
threadSendMails.IsBackground = true;
threadSendMails.Start();
}
et ajouter un espace de noms
using System.Threading;
Un conseil! Vérifiez la boîte de réception de l'expéditeur, vous devrez peut-être autoriser des applications moins sécurisées. Voir: https://www.google.com/settings/security/lesssecureapps
Essaye ça,
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());
}
}
utiliser de cette façon
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);
N'oubliez pas ceci:
using System.Net;
using System.Net.Mail;
Pour éviter les problèmes de sécurité dans Gmail, vous devez d'abord générer un mot de passe d'application à partir de vos paramètres Gmail et vous pouvez utiliser ce mot de passe au lieu d'un vrai mot de passe pour envoyer un e-mail même si vous utilisez la vérification en deux étapes.
Changer d'expéditeur sur la messagerie Gmail / Outlook.com:
Pour empêcher l'usurpation d'identité - Gmail / Outlook.com ne vous permettra pas d'envoyer à partir d'un nom de compte d'utilisateur arbitraire.
Si vous avez un nombre limité d'expéditeurs, vous pouvez suivre ces instructions, puis définir le From
champ à cette adresse: Envoi de courrier à partir d'une adresse différente
Si vous souhaitez envoyer à partir d'une adresse e-mail arbitraire (comme un formulaire de commentaires sur le site Web où l'utilisateur saisit son e-mail et que vous ne voulez pas qu'il vous envoie un e-mail directement), la meilleure chose à faire est la suivante:
msg.ReplyToList.Add(new System.Net.Mail.MailAddress(email, friendlyName));
Cela vous permettrait de simplement cliquer sur `` répondre '' dans votre compte de messagerie pour répondre au fan de votre groupe sur une page de commentaires, mais ils n'obtiendraient pas votre e-mail réel, ce qui entraînerait probablement une tonne de spam.
Si vous êtes dans un environnement contrôlé, cela fonctionne très bien, mais veuillez noter que j'ai vu certains clients de messagerie envoyer à l'adresse de même lorsque la réponse à est spécifiée (je ne sais pas laquelle).
J'ai eu le même problème, mais il a été résolu en accédant aux paramètres de sécurité de gmail et aux applications Allowing Less Secure . Le code de Domenic & Donny fonctionne, mais uniquement si vous avez activé ce paramètre
Si vous êtes connecté (à Google), vous pouvez suivre ce lien et basculer "Activer" pour "Accès aux applications moins sécurisées"
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();
}
}
}
}
Voici une méthode pour envoyer du courrier et obtenir des informations d'identification à partir de 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;
}
}
Et la section correspondante dans 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>
Essaye celui-là
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)
{
// Write the exception to a Log file.
}
catch (SmtpException ex)
{
// Write the exception to a Log file.
}
finally
{
mailSender = null;
mailMessage.Dispose();
}
return false;
}
Le problème pour moi était que mon mot de passe contenait une barre oblique "\" , que je copiais sans réaliser que cela causerait des problèmes.
En copiant à partir d' une autre réponse , les méthodes ci-dessus fonctionnent mais gmail remplace toujours l'email "de" et "répondre à" par le compte gmail d'envoi réel. apparemment, il y a un travail autour cependant:
http://karmic-development.blogspot.in/2013/10/send-email-from-aspnet-using-gmail-as.html
"3. Dans l'onglet Comptes, cliquez sur le lien" Ajoutez une autre adresse e-mail que vous possédez ", puis vérifiez-la"
Mise à jour 3: Reader Derek Bennett dit: "La solution consiste à aller dans vos paramètres gmail: Comptes et" Définir par défaut "un compte autre que votre compte gmail. Cela obligera gmail à réécrire le champ De avec quel que soit l'e-mail du compte par défaut L'adresse est."
Tu peux essayer Mailkit
. Il vous offre de meilleures fonctionnalités avancées pour envoyer du courrier. Vous pouvez trouver plus de ceci Voici un exemple
MimeMessage message = new MimeMessage();
message.From.Add(new MailboxAddress("FromName", "YOU_FROM_ADDRESS@gmail.com"));
message.To.Add(new MailboxAddress("ToName", "YOU_TO_ADDRESS@gmail.com"));
message.Subject = "MyEmailSubject";
message.Body = new TextPart("plain")
{
Text = @"MyEmailBodyOnlyTextPart"
};
using (var client = new SmtpClient())
{
client.Connect("SERVER", 25); // 25 is port you can change accordingly
// Note: since we don't have an OAuth2 token, disable
// the XOAUTH2 authentication mechanism.
client.AuthenticationMechanisms.Remove("XOAUTH2");
// Note: only needed if the SMTP server requires authentication
client.Authenticate("YOUR_USER_NAME", "YOUR_PASSWORD");
client.Send(message);
client.Disconnect(true);
}