Thay vì dựa vào máy chủ của tôi để gửi email, tôi đã nghĩ đến việc gửi các email bằng tài khoản Gmail của mình. Các email là các email được cá nhân hóa cho các ban nhạc tôi chơi trong chương trình của tôi.
Có khả năng làm việc đó không?
Thay vì dựa vào máy chủ của tôi để gửi email, tôi đã nghĩ đến việc gửi các email bằng tài khoản Gmail của mình. Các email là các email được cá nhân hóa cho các ban nhạc tôi chơi trong chương trình của tôi.
Có khả năng làm việc đó không?
Câu trả lời:
Hãy chắc chắn để sử dụng System.Net.Mail
, không bị phản đối System.Web.Mail
. Làm SSL với System.Web.Mail
là một mớ hỗn độn của các phần mở rộng 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
) với something@gmail.com
tư cách là người gửi. Btw: smtp.gmail.com
tự động ghi đè địa chỉ người gửi nếu đó không phải là địa chỉ của bạn.
Câu trả lời trên không hoạt động. Bạn phải đặt DeliveryMethod = SmtpDeliveryMethod.Network
hoặc nó sẽ quay lại với lỗi " máy khách không được xác thực ". Ngoài ra, đó luôn là một ý tưởng tốt để đặt thời gian chờ.
Mã sửa đổi:
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);
}
Để các câu trả lời khác hoạt động "từ máy chủ", trước tiên, Bật quyền truy cập cho các ứng dụng kém an toàn hơn trong tài khoản gmail.
Có vẻ như gần đây google đã thay đổi chính sách bảo mật. Câu trả lời được xếp hạng hàng đầu không còn hoạt động nữa, cho đến khi bạn thay đổi cài đặt tài khoản của mình như được mô tả tại đây: https://support.google.com/accountsfurt/6010255?hl=vi-GB
Kể từ tháng 3 năm 2016, google đã thay đổi vị trí cài đặt một lần nữa!
Điều này là để gửi email với tệp đính kèm .. Đơn giản và ngắn gọn ..
nguồn: http://coding-issues.blogspot.in/2012/11/seinating-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 có thể chặn các lần đăng nhập từ một số ứng dụng hoặc thiết bị không sử dụng các tiêu chuẩn bảo mật hiện đại. Vì các ứng dụng và thiết bị này dễ xâm nhập hơn, nên việc chặn chúng sẽ giúp tài khoản của bạn an toàn hơn.
Một số ví dụ về các ứng dụng không hỗ trợ các tiêu chuẩn bảo mật mới nhất bao gồm:
Do đó, bạn phải kích hoạt Đăng nhập ít an toàn hơn trong tài khoản google của mình.
Sau khi đăng nhập vào tài khoản google, hãy truy cập:
https://myaccount.google.com/lesssecur Ứng dụng lại
hoặc
https://www.google.com.vn/sinstall/security/lesssecur Ứng dụng lại
Trong C #, bạn có thể sử dụng mã sau:
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);
}
}
Để tôi làm cho nó hoạt động, tôi phải kích hoạt tài khoản gmail của mình để các ứng dụng khác có thể truy cập. Điều này được thực hiện với "bật các ứng dụng kém an toàn" và cũng sử dụng liên kết này: https://accounts.google.com/b/0/DisplayUnlockCaptcha
Đây là phiên bản của tôi: " Gửi email bằng C # bằng 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();
}
}
}
}
Tôi hy vọng mã này sẽ hoạt động tốt. Bạn có thể thử.
// 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);
Bao gồm điều này,
using System.Net.Mail;
Và sau đó,
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);
Nguồn : Gửi email trong ASP.NET C #
Dưới đây là một mã làm việc mẫu để gửi thư bằng C #, trong ví dụ dưới đây tôi đang sử dụng máy chủ smtp của google.
Mã này khá tự giải thích, thay thế email và mật khẩu bằng các giá trị email và mật khẩu của bạn.
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);
}
Nếu bạn muốn gửi email nền, xin vui lòng làm như dưới đây
public void SendEmail(string address, string subject, string message)
{
Thread threadSendMails;
threadSendMails = new Thread(delegate()
{
//Place your Code here
});
threadSendMails.IsBackground = true;
threadSendMails.Start();
}
và thêm không gian tên
using System.Threading;
Một lời khuyên! Kiểm tra hộp thư đến của người gửi, có thể bạn cần cho phép các ứng dụng kém an toàn hơn. Xem: https://www.google.com.vn/sinstall/security/lesssecur xuất hiện lại
Thử cái này,
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());
}
}
sử dụng cách này
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);
Đừng quên điều này:
using System.Net;
using System.Net.Mail;
Để tránh các vấn đề bảo mật trong Gmail, trước tiên bạn nên tạo mật khẩu ứng dụng từ cài đặt Gmail của mình và bạn có thể sử dụng mật khẩu này thay vì mật khẩu thực để gửi email ngay cả khi bạn sử dụng xác minh hai bước.
Thay đổi người gửi trên email Gmail / Outlook.com:
Để tránh giả mạo - Gmail / Outlook.com sẽ không cho phép bạn gửi từ tên tài khoản người dùng tùy ý.
Nếu bạn có số lượng người gửi hạn chế, bạn có thể làm theo các hướng dẫn sau đó đặt From
trường thành địa chỉ này: Gửi thư từ một địa chỉ khác
Nếu bạn muốn gửi từ một địa chỉ email tùy ý (chẳng hạn như mẫu phản hồi trên trang web nơi người dùng nhập email của họ và bạn không muốn họ gửi email trực tiếp cho bạn) về cách tốt nhất bạn có thể làm là:
msg.ReplyToList.Add(new System.Net.Mail.MailAddress(email, friendlyName));
Điều này sẽ cho phép bạn chỉ cần nhấn 'trả lời' trong tài khoản email của mình để trả lời người hâm mộ của ban nhạc của bạn trên trang phản hồi, nhưng họ sẽ không nhận được email thực sự của bạn có thể dẫn đến hàng tấn thư rác.
Nếu bạn đang ở trong một môi trường được kiểm soát, điều này hoạt động rất tốt, nhưng xin lưu ý rằng tôi đã thấy một số ứng dụng email được gửi đến địa chỉ ngay cả khi trả lời được chỉ định (tôi không biết là gì).
Tôi cũng gặp vấn đề tương tự, nhưng nó đã được giải quyết bằng cách vào cài đặt bảo mật của gmail và cho phép các ứng dụng kém an toàn hơn . Mã từ Domenic & Donny hoạt động, nhưng chỉ khi bạn bật cài đặt đó
Nếu bạn đã đăng nhập (với Google), bạn có thể theo liên kết này và chuyển đổi "Bật" cho "Truy cập cho các ứng dụng kém an toàn hơn"
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();
}
}
}
}
Đây là một phương pháp để gửi thư và nhận thông tin đăng nhập từ 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;
}
}
Và phần tương ứng trong 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>
Hãy thử cái này
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;
}
Vấn đề đối với tôi là mật khẩu của tôi có dấu gạch chéo "\" trong đó, tôi sao chép đã dán mà không nhận ra rằng nó sẽ gây ra vấn đề.
Sao chép từ một câu trả lời khác , các phương pháp trên hoạt động nhưng gmail luôn thay thế email "từ" và "trả lời" bằng tài khoản gmail gửi thực tế. rõ ràng có một công việc xung quanh tuy nhiên:
http://karmic-development.blogspot.in/2013/10/send-email-from-aspnet-USE-gmail-as.html
"3. Trong tab Tài khoản, nhấp vào liên kết" Thêm địa chỉ email khác bạn sở hữu "sau đó xác minh nó"
Hoặc có thể này
Cập nhật 3: Trình đọc Derek Bennett nói: "Giải pháp là vào Cài đặt gmail của bạn: Tài khoản và" Đặt mặc định "một tài khoản không phải là tài khoản gmail của bạn. Điều này sẽ khiến gmail viết lại trường Từ với bất kỳ email nào của tài khoản mặc định địa chỉ là."
Bạn có thể thử Mailkit
. Nó cung cấp cho bạn chức năng tốt hơn và nâng cao để gửi thư. Bạn có thể tìm thêm từ này Dưới đây là một ví dụ
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);
}