Zamiast polegać na tym, że mój host wysyła wiadomość e-mail, myślałem o wysyłaniu wiadomości e-mail za pomocą mojego konta Gmail . E-maile to spersonalizowane wiadomości e-mail do zespołów, w których gram w moim programie.
Czy można to zrobić?
Zamiast polegać na tym, że mój host wysyła wiadomość e-mail, myślałem o wysyłaniu wiadomości e-mail za pomocą mojego konta Gmail . E-maile to spersonalizowane wiadomości e-mail do zespołów, w których gram w moim programie.
Czy można to zrobić?
Odpowiedzi:
Pamiętaj, aby użyć System.Net.Mail
, a nie przestarzałe System.Web.Mail
. Robienie SSL z System.Web.Mail
jest ogromnym bałaganem hacky rozszerzeń.
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
) something@gmail.com
jako nadawcy. Btw: smtp.gmail.com
automatycznie zastępuje adres nadawcy, jeśli nie jest on twój.
Powyższa odpowiedź nie działa. Musisz ustawić DeliveryMethod = SmtpDeliveryMethod.Network
lub wróci z błędem „ klient nie został uwierzytelniony ”. Poza tym zawsze dobrze jest ustawić limit czasu.
Zmieniony kod:
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);
}
Aby pozostałe odpowiedzi działały „z serwera” najpierw włącz dostęp dla mniej bezpiecznych aplikacji na koncie Gmail.
Wygląda na to, że ostatnio Google zmieniło swoją politykę bezpieczeństwa. Najwyżej oceniana odpowiedź nie działa, dopóki nie zmienisz ustawień konta zgodnie z opisem tutaj: https://support.google.com/accounts/answer/6010255?hl=pl
Od marca 2016 r. Google ponownie zmieniło lokalizację ustawienia!
To jest, aby wysłać e-mail z załącznikiem. Prosty i krótki ..
źródło: 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 może blokować próby logowania z niektórych aplikacji lub urządzeń, które nie stosują nowoczesnych standardów bezpieczeństwa. Ponieważ te aplikacje i urządzenia są łatwiejsze do włamania, zablokowanie ich pomaga utrzymać bezpieczeństwo konta.
Niektóre przykłady aplikacji, które nie obsługują najnowszych standardów bezpieczeństwa, obejmują:
Dlatego musisz włączyć mniej bezpieczne logowanie na swoim koncie Google.
Po zalogowaniu się na konto Google przejdź do:
https://myaccount.google.com/lesssecureapps
lub
https://www.google.com/settings/security/lesssecureapps
W języku C # możesz użyć następującego kodu:
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);
}
}
Aby go uruchomić, musiałem włączyć konto Gmail, aby inne aplikacje mogły uzyskać dostęp. Odbywa się to za pomocą „włączania mniej bezpiecznych aplikacji”, a także za pomocą tego linku: https://accounts.google.com/b/0/DisplayUnlockCaptcha
Oto moja wersja: „ Wyślij e-mail w C # za pomocą Gmaila ”.
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();
}
}
}
}
Mam nadzieję, że ten kod będzie działał dobrze. Możesz spróbować.
// 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);
Uwzględnij to,
using System.Net.Mail;
I wtedy,
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);
Źródło : Wyślij e-mail w ASP.NET C #
Poniżej znajduje się przykładowy działający kod do wysyłania poczty za pomocą C #, w poniższym przykładzie korzystam z serwera smtp Google.
Kod jest dość oczywisty, zastąp adres e-mail i hasło wartościami adresu e-mail i hasła.
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);
}
Jeśli chcesz wysłać e-mail w tle, wykonaj następujące czynności
public void SendEmail(string address, string subject, string message)
{
Thread threadSendMails;
threadSendMails = new Thread(delegate()
{
//Place your Code here
});
threadSendMails.IsBackground = true;
threadSendMails.Start();
}
i dodaj przestrzeń nazw
using System.Threading;
Jedna wskazówka! Sprawdź skrzynkę odbiorczą nadawcy, być może potrzebujesz mniej bezpiecznych aplikacji. Zobacz: https://www.google.com/settings/security/lesssecureapps
Spróbuj tego,
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());
}
}
użyj tego sposobu
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);
Nie zapomnij tego:
using System.Net;
using System.Net.Mail;
Aby uniknąć problemów związanych z bezpieczeństwem w Gmailu, należy najpierw wygenerować hasło do aplikacji w ustawieniach Gmaila i możesz użyć tego hasła zamiast prawdziwego hasła, aby wysłać wiadomość e-mail, nawet jeśli korzystasz z weryfikacji dwuetapowej.
Zmiana nadawcy w e-mailu Gmail / Outlook.com:
Aby zapobiec fałszowaniu - Gmail / Outlook.com nie pozwala na wysyłanie z nazwy dowolnego konta użytkownika.
Jeśli masz ograniczoną liczbę nadawców, możesz postępować zgodnie z tymi instrukcjami, a następnie ustawić From
pole na ten adres: Wysyłanie poczty z innego adresu
Jeśli chcesz wysłać z dowolnego adresu e-mail (takiego jak formularz zwrotny na stronie internetowej, na której użytkownik wprowadza swój adres e-mail, a nie chcesz, aby wysyłał Ci bezpośrednio e-mailem), możesz:
msg.ReplyToList.Add(new System.Net.Mail.MailAddress(email, friendlyName));
Pozwoliłoby to po prostu nacisnąć „odpowiedz” na swoim koncie e-mail, aby odpowiedzieć fanowi zespołu na stronie z opiniami, ale nie otrzymaliby twojego prawdziwego e-maila, co prawdopodobnie doprowadziłoby do tony spamu.
Jeśli jesteś w kontrolowanym środowisku, działa to świetnie, ale pamiętaj, że widziałem niektórych klientów e-mail wysyłających na adres od, nawet gdy określono odpowiedź na (nie wiem, który).
Miałem ten sam problem, ale problem został rozwiązany, przechodząc do ustawień zabezpieczeń Gmaila i zezwalając na mniej bezpieczne aplikacje . Kod Domenic & Donny działa, ale tylko jeśli włączysz to ustawienie
Jeśli jesteś zalogowany (w Google), możesz skorzystać z tego linku i przełączyć „Włącz” na „Dostęp dla mniej bezpiecznych aplikacji”
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();
}
}
}
}
Oto jedna metoda wysyłania poczty i uzyskiwania poświadczeń z pliku 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;
}
}
I odpowiednia sekcja w pliku 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>
Spróbuj tego
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;
}
Problemem było to, że moje hasło zawierało ukośnik „\” , który skopiowałem wklejając, nie wiedząc, że spowoduje to problemy.
Kopiowanie z innej odpowiedzi , powyższe metody działają, ale Gmail zawsze zastępuje wiadomości e-mail „od” i „odpowiedz na” z faktycznym kontem wysyłającym Gmail. najwyraźniej istnieje jednak obejście:
http://karmic-development.blogspot.in/2013/10/send-email-from-aspnet-using-gmail-as.html
„3. Na karcie Konta kliknij link„ Dodaj kolejny adres e-mail, którego jesteś właścicielem ”, a następnie zweryfikuj go”
A może to
Aktualizacja 3: Czytelnik Derek Bennett mówi: „Rozwiązaniem jest przejście do ustawień Gmaila: Konta i„ Ustaw jako domyślne ”konto inne niż konto Gmail. Spowoduje to, że Gmail ponownie przepisze pole Od niezależnie od adresu e-mail konta domyślnego adres to."
Można spróbować Mailkit
. Zapewnia lepszą i zaawansowaną funkcjonalność wysyłania poczty. Możesz znaleźć więcej z tego Oto przykład
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);
}