Gửi mail với multiple files bằng c#
mình sẽ hướng dẫn mọi người viết một ứng dụng gửi mail đơn giản có thể attach nhiều files bằng C#
Chia sẻ với mọi người cách build một app sử dụng SMTP Server Mail để gửi mail cho đối phương nhé.
Vậy bây giờ ta cùng bắt tay vào làm thôi :)
SMTP Server Mail là gì?
Với cái tên thân thương là SMTP Server (viết tắt của từ "Simple Mail Transfer Protocol") , nó là một ứng dụng hay được nhiều người dùng biết đến là server chuyên dùng để gửi mail. Đây là một trong những dịch vụ cho phép doanh nghiệp có thể dễ dàng gửi đi email với số lượng cực lớn và không bị giới hạn. Vì dịch vụ này sẽ gửi mail cho bạn thông qua TCP hoặc IP và đảm bảo sự nhanh nhẹn, bảo mật và tiện lợi nên nó vượt trội hơn hẳn các hòm mail miễn phí của Gmail hay các mail đi kèm cùng với hosting. Thường thì SMTP Server có thể giúp người dùng có thể thực hiện chuyển mail thông qua cổng Internet 25 (TCP), nhưng trong bài viết này để an toàn và bảo mật hơn thì mình dùng cổng 587.
Lưu ý là với mỗi một dịch vụ sẽ có những port tương ứng, chứ không chỉ có mỗi port 587 hay 25 đâu nhé.
Bước 1: Đầu tiên các bạn vào Visual Studio, chọn tạo một ứng dụng Winform sử dụng framework .NET và đặt tên cho project mới của mình
Bước 2: Làm một cái giao diện sương sương, bạn có thể tùy ý custom theo ý muốn của bản thân mà không cần giống mình cũng được
Như vậy là tạm thời xong được cái vỏ, giờ chúng ta đến cái core của ứng dụng nha. Vì ứng dụng này cũng đơn giản lắm nên bạn cứ yên tâm làm một phát là chạy được liền nghen. Nhưng hãy nhớ là đi từ từ từng bước chứ đừng hấp tấp vội vã quá nhé.
Bước 3: Thêm vào 3 thư viện dưới đây của C# vào ứng dụng. Sau đó khai báo thêm biến mảng string str2 với tầm 30 phần tử (cách làm này của mình hơi dở, bạn có thể tạo một biến str2 được cấp phát động và cứ mỗi lần có tên file mới thì cứ add vào là được nhé)
using System.Net;using System.Net.Mail;using System.IO;
string[] str2 = new string[30];
Bước 4: Double - click vào nút Send để bắt đầu code cho các tính năng của nó. Trước mắt thì dưới đây là đoạn code mà mình dùng cho nút Send, tức là khi bạn bấm nút gửi đi, những file nào đã được upload thành công sẽ được thông báo, sau đó khi ứng dụng gửi thành công, nó cũng sẽ gửi thông báo cho bạn.
private void SendBtn_Click(object sender, EventArgs e)
{
// tạo một tin nhắn và thêm những thông tin cần thiết như: ai gửi, người nhận, tên tiêu đề, và có đôi lời gì cần nhắn nhủ
MailMessage mail = new MailMessage(fromText.Text, toText.Text, subjectText.Text, chatText.Text); //
mail.IsBodyHtml = true;
//gửi tin nhắn
SmtpClient client = new SmtpClient(smtpText.Text);
client.Host = "smtp.gmail.com";
//ta không dùng cái mặc định đâu, mà sẽ dùng cái của riêng mình
client.UseDefaultCredentials = false;
client.Port = 587; //vì sử dụng Gmail nên mình dùng port 587
// thêm vào credential vì SMTP server cần nó để biết được email + password của email đó mà bạn đang dùng
client.Credentials = new System.Net.NetworkCredential(userNameTxt.Text, passText.Text);
client.EnableSsl = true; //vì ta cần thiết lập kết nối SSL với SMTP server nên cần gán nó bằng true
client.Send(mail);
MessageBox.Show("Đã gửi tin nhắn thành công!", "Thành Công", MessageBoxButtons.OK);
}
Bước 5: Double - click vào nút Attach File để code cho tính năng của nó
private void SingleFile_Click(object sender, EventArgs e)
{
string fileName = ""; //khởi tạo ban đầu
//open tệp tin với component OpenFileDialog
using (OpenFileDialog myDialog = new OpenFileDialog())
{
myDialog.Multiselect = true;
myDialog.InitialDirectory = "";
myDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
myDialog.FilterIndex = 2;
myDialog.RestoreDirectory = true;
if (myDialog.ShowDialog() == DialogResult.OK)
{
foreach (string file in myDialog.FileNames)
//cứ sau mỗi lần lặp ta lại có được một file, điều này cho phép bạn chọn nhiều file thay vì chỉ một cái
{
//Lấy đường dẫn của file cụ thể
//lấy tên của file cụ thể
fileName = Path.GetFileName(file);
}
}
str2 = myDialog.FileNames;
}
}
Bước 6: Nhưng như vậy thì vẫn chưa đủ, bạn cần phải attach các file có được vào mỗi khi bấm nút Send nữa, có như vậy thì phía bên nhận mới nhận được file mà bạn gửi. Lưu ý xử lý lỗi trong trường hợp bạn chỉ nhắn tin chứ không gửi file, tức là chỉ khi nào fileName != null thì mới thực hiện việc attach file.
private void SendBtn_Click(object sender, EventArgs e)
{
//....
foreach (string names in str2)
{
if(names != null)
{
mail.Attachments.Add(new Attachment(names));
MessageBox.Show("Have upload " + names + " succesfully!", "Upload File");
}
}
//....
}
Bước 7: Trong trường hợp bạn muốn tiếp tục gửi một mail khác nữa trong khi đợi mail hiện tại được gửi đi, có thể dùng thread. Tức là với thread thì mọi chuyện sẽ trở thành "đường ai nấy đi, việc ai nấy làm", chứ bạn không cần phải đợi mail hiện tại được gửi xong, bạn mới được gửi tiếp như trước nữa.
private void SendBtn_Click(object sender, EventArgs e)
{
Thread thread = new Thread(() =>
{
// phần code hiện tại
);
thread.Start();
}
Bước 8: Nếu trong quá trình gửi mail, bạn có thông báo "The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Authentication Required...." thì có thể vào phần Security của tài khoản Gmail gửi và thiết lập chế độ "Allow Less Secure App". Trong trường hợp vẫn không được nữa thì hãy chú ý lại gmail và password của người gửi nhé.
Bước 9: Build ứng dụng và tận hưởng thành quả thôi! (Trong lúc làm vội có gõ sai chữ "successfully" thành "succesfully") :< anh em bỏ qua giúp nhé)
- Tags:
Không có đánh giá nào.
Viết một đánh giá.
Để bình luận vui lòng Đăng nhập tài khoản ! hoặcĐăng ký mới!