กำลังส่งอีเมล รูปแบบที่ง่ายที่สุดในการส่งข้อมูลไปยังเมลโดยใช้ HTML และ PHP การส่งอีเมลพร้อมไฟล์แนบ c#

สวัสดี เนื่องจากกราฟมาเนียของฉันกำลังก้าวหน้า ฉันจึงตัดสินใจเพิ่มบทความอื่น บทความจะเช่นเคยพร้อมตัวอย่างใน C # แต่ VB "schnik ที่มีทักษะไม่มากก็น้อยจะเขียนโค้ดทั้งหมดใหม่ภายใต้ VB.NET ได้อย่างง่ายดาย

เริ่มกันเลยดีกว่า

สำหรับ การส่งอีเมลเราจำเป็นต้องใช้วัตถุสามอย่าง System.Net.Mail.SmtpClient เพื่อส่งข้อความ System.Net.Mail.MailMessage เพื่อเป็นตัวแทนข้อความ และ System.Net.NetworkCredential เพื่ออนุญาต

มาสร้างลูกค้ากันเถอะ:

ลูกค้า Var = SmtpClient ใหม่ ("$ Mail-Server-Address$", $ Mail-Server-Port$);

การอ้างอิงตัวสร้าง:

SmtpClient (โฮสต์สตริง, พอร์ต int);

มาสร้างอินสแตนซ์ของคลาส MailMessage:

Var msg = MailMessage ใหม่ ("จาก", "ถึง");

ทีนี้มากำหนดหัวเรื่องและเนื้อหาของจดหมายกัน (ยังไงก็ตาม ทุกอย่างสามารถตั้งค่าได้ในตัวสร้าง) เช่นเดียวกับการเข้าสู่ระบบและรหัสผ่านสำหรับไคลเอนต์ smtp จากนั้นเราจะส่งอีเมลโดยใช้วิธีการส่งของวัตถุลูกค้าของเรา:

ลูกค้า Var = SmtpClient ใหม่ ("smtp.yandex.ru"); var msg = MailMessage ใหม่ ("จาก", "ถึง"); msg.Subject = "ข้อความทดสอบของฉัน"; msg.Body = "สวัสดี เพื่อนของฉัน! ลองนึกดูว่าฉันเพิ่งเขียนโปรแกรมที่น่าทึ่งเพื่อส่งจดหมายที่ไม่มีความหมายนี้ถึงคุณเป็นพันล้านครั้งด้วยการคลิกเพียงไม่กี่ครั้งเท่านั้น!"; msg.SubjectEncoding = การเข้ารหัส UTF8; msg.BodyEncoding = การเข้ารหัส UTF8; // ลำดับความสำคัญ msg.Priority = MailPriority.High; // เนื้อหาข้อความใน html? msg.IsBodyHtml = เท็จ; client.Credentials = ใหม่ NetworkCredential ("เข้าสู่ระบบ", "รหัสผ่าน"); client.Send(msg);

นั่นคือทั้งหมด อย่าลืมป้อนข้อมูลที่จำเป็นทั้งหมดอย่างถูกต้อง


ความคิดเห็น()

รุสแลง02 30

CoolHacker ฉันขอยืมรหัสนี้จากคุณสำหรับส่วนที่ 3 ของเว็บเบราว์เซอร์ได้ไหม

คูลแฮกเกอร์ 770 รุสแลง02 30

ขอบคุณ ฉันจะใช้มันเพื่อส่งลิงค์ทางอีเมล
เช่นเดียวกับใน Firefox

LetSevI 10 คุณโอลิมเปีย 14 ตุลาคม 2556 เวลา 19:29 น

ส่งอีเมลโดยทางโปรแกรมโดยใช้บริการต่างๆ

  • .สุทธิ,

บ่อยครั้งที่คุณต้องจัดการกับการส่ง อีเมลจาก รหัสโปรแกรม. ไม่ต้องไปหาตัวอย่างที่ไหนไกล

บทความนี้เป็นคำใบ้และไม่ได้เปิดเผยอะไรใหม่ แต่ก่อนที่จะเขียน ฉันดูคล้ายกันบนอินเทอร์เน็ตและรู้สึกประหลาดใจมากที่เกือบทุกแห่งเสนอโซลูชันที่ใช้งานไม่ได้หรือล้าสมัย หรือเขียนโดยไม่รู้หนังสือ

สิ่งแรกที่คุณไม่ควรทำกับตัวอย่างเหล่านี้คือการใช้ System.Web.Mail ซึ่งเลิกใช้งานไปนานแล้ว และตั้งแต่นั้นเป็นต้นมา วิชวลสตูดิโอ 2010 ไม่สามารถเพิ่มห้องสมุด System.Web โดยไม่รู้ตัว เส้นทางเต็มเป็น DLL ที่สอดคล้องกัน
ขอเสนอให้ใช้ไลบรารี System.Net แทน
ใช้ System.Net; ใช้ System.Net.Mail;
ดังนั้น วิธีที่ง่ายที่สุด ที่สำคัญและใช้บ่อยที่สุดคือการส่งจดหมายจากคุณ เมลเซิร์ฟเวอร์ที่ไคลเอนต์ SMTP ได้รับการกำหนดค่า ตามที่คุณเข้าใจ เซิร์ฟเวอร์สามารถเป็นได้ทั้งเซิร์ฟเวอร์ที่แอปพลิเคชันทำงานอยู่หรือเซิร์ฟเวอร์ระยะไกลที่คุณมีสิทธิ์ส่งจดหมายโดยไม่ได้รับอนุญาตเพิ่มเติม

โค้ดตัวอย่างสำหรับการส่งอีเมลจากเครื่องโลคัล:
", "[ป้องกันอีเมล]"))( mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; โดยใช้ (SmtpClient sc = new SmtpClient("127.0.mail server and port ถ้าจำเป็น sc.Send(mm ) ) ) )

ใช้บริการอีเมลเช่น Gmail, Yandex, Mail.ru เป็นต้น ทุกอย่างเหมือนกัน เพิ่มเฉพาะพารามิเตอร์ที่มีการอนุญาตเท่านั้น

เซิร์ฟเวอร์ SMTP: smtp.gmail.com
ท่าเรือ: 587
โดยใช้ (MailMessage mm = new MailMessage("ชื่อ ", "[ป้องกันอีเมล]"))( mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.gmail.com", 587))( sc. EnableSsl = จริง sc.DeliveryMethod = SmtpDeliveryMethod.Network sc.UseDefaultCredentials = เท็จ sc.Credentials = NetworkCredential ใหม่ (" [ป้องกันอีเมล]", "GmailPassword"); sc.Send(mm); ) )

เซิร์ฟเวอร์ SMTP: smtp.yandex.ru
พอร์ต: 25
โดยใช้ (MailMessage mm = new MailMessage("ชื่อ ", "[ป้องกันอีเมล]"))( mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.yandex.ru", 25))( sc. EnableSsl = จริง sc.DeliveryMethod = SmtpDeliveryMethod.Network sc.UseDefaultCredentials = เท็จ sc.Credentials = NetworkCredential ใหม่ (" [ป้องกันอีเมล]", "YandexPassword"); sc.Send(mm); ) )

เซิร์ฟเวอร์ SMTP: smtp.mail.ru
พอร์ต: 25
โดยใช้ (MailMessage mm = new MailMessage("ชื่อ ", "[ป้องกันอีเมล]"))( mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.mail.ru", 25))( sc. EnableSsl = จริง sc.DeliveryMethod = SmtpDeliveryMethod.Network sc.UseDefaultCredentials = เท็จ sc.Credentials = NetworkCredential ใหม่ (" [ป้องกันอีเมล]", "รหัสผ่าน MailRu"); sc.Send(mm); ) )
ถ้าคุณมี ตู้จดหมายบนบริการ mail.ru ลงท้ายด้วย inbox.ru, list.ru หรือ bk.ru จากนั้นที่อยู่ของเซิร์ฟเวอร์ SMTP (smtp.inbox.ru, smtp.list.ru และ smtp.bk.ru) จะเปลี่ยนตามไปด้วย

อย่างที่คุณเห็น ในการใช้บริการเมลอื่นในโปรแกรมของคุณ คุณจะต้องค้นหาที่อยู่และพอร์ตของเซิร์ฟเวอร์ SMTP รวมถึงกฎการให้สิทธิ์เท่านั้น

ต้องจำไว้ว่าบริการอีเมลของบุคคลที่สามเกือบทั้งหมดกำหนดจำนวนอีเมลที่ส่งในช่วงเวลาหนึ่ง

แท็ก: อีเมล, การส่งอีเมล, smtp

หนึ่งในฟังก์ชันที่ได้รับการร้องขอมากที่สุดในไซต์คือแบบฟอร์มใบสมัครหรือคำสั่งซื้อ ซึ่งเป็นข้อมูลที่ส่งไปยังอีเมลของเจ้าของไซต์ ตามกฎแล้ว แบบฟอร์มดังกล่าวเป็นแบบเรียบง่ายและประกอบด้วยสองหรือสามฟิลด์สำหรับการป้อนข้อมูล จะสร้างแบบฟอร์มการสั่งซื้อได้อย่างไร? สิ่งนี้จะต้องใช้ภาษามาร์กอัป HTML และภาษา การเขียนโปรแกรม PHP.

ภาษามาร์กอัป HTML นั้นเรียบง่าย คุณเพียงแค่ต้องหาวิธีการและตำแหน่งที่จะวางแท็กบางอย่าง ด้วยภาษาโปรแกรม PHP สิ่งต่าง ๆ จะซับซ้อนขึ้นเล็กน้อย

ไม่ใช่เรื่องยากสำหรับโปรแกรมเมอร์ในการสร้างแบบฟอร์มดังกล่าว แต่การดำเนินการบางอย่างอาจดูเหมือนยากสำหรับผู้เขียนโค้ด HTML

การสร้างแบบฟอร์มส่ง html

บรรทัดแรกจะอยู่ถัดไป

นี่เป็นองค์ประกอบรูปแบบที่สำคัญมาก ในนั้นเราระบุว่าจะถ่ายโอนข้อมูลอย่างไรและไฟล์ใด ในกรณีนี้ ทุกอย่างจะถูกส่งโดยวิธี POST ไปยังไฟล์ send.php โปรแกรมในไฟล์นี้ต้องยอมรับข้อมูลตามลำดับ ซึ่งจะบรรจุอยู่ในอาร์เรย์โพสต์ และส่งไปยังที่อยู่อีเมลที่ระบุ

กลับมาที่ฟอร์มกันเถอะ บรรทัดที่สองจะมีฟิลด์สำหรับป้อนชื่อเต็ม มีรหัสดังต่อไปนี้:

ประเภทของแบบฟอร์มคือข้อความ กล่าวคือ ผู้ใช้จะสามารถป้อนหรือคัดลอกข้อความจากแป้นพิมพ์ได้ที่นี่ พารามิเตอร์ชื่อประกอบด้วยชื่อของแบบฟอร์ม ในกรณีนี้คือ fio ภายใต้ชื่อนี้ทุกอย่างที่ผู้ใช้ป้อนในฟิลด์นี้จะถูกส่ง พารามิเตอร์ตัวยึดระบุสิ่งที่จะเขียนในฟิลด์นี้เป็นคำอธิบาย

บรรทัดถัดไป:

ที่นี่ เกือบทุกอย่างจะเหมือนกัน แต่มีการระบุชื่อฟิลด์เป็นอีเมล และมีการระบุคำอธิบายให้ผู้ใช้ป้อนที่อยู่อีเมลในแบบฟอร์มนี้

บรรทัดถัดไปจะเป็นปุ่มส่ง:

และบรรทัดสุดท้ายในแบบฟอร์มจะเป็นแท็ก

ตอนนี้เรามารวมเข้าด้วยกัน





ตอนนี้มาทำให้ฟิลด์ในแบบฟอร์มบังคับ เรามีรหัสต่อไปนี้:





สร้างไฟล์ที่รับข้อมูลจากแบบฟอร์ม HTML

นี่จะเป็นไฟล์ชื่อ send.php

ในไฟล์ ในขั้นตอนแรก คุณต้องรับข้อมูลจากอาร์เรย์โพสต์ ในการทำเช่นนี้ เราสร้างตัวแปรสองตัว:

$fio = $_POST["fio"];
$email = $_POST["อีเมล"];

ชื่อตัวแปรใน php นำหน้าด้วยเครื่องหมาย $ และเครื่องหมายอัฒภาคจะอยู่ท้ายแต่ละบรรทัด $_POST เป็นอาร์เรย์ที่ส่งผ่านข้อมูลจากแบบฟอร์ม ในรูปแบบ html มีการระบุวิธีการส่ง method="post" ดังนั้นจึงนำตัวแปรสองตัวมาจาก แบบฟอร์ม html. เพื่อวัตถุประสงค์ในการปกป้องไซต์ของคุณ คุณต้องส่งตัวแปรเหล่านี้ผ่านตัวกรองหลายตัว - ฟังก์ชัน php

ฟังก์ชันแรกจะแปลงอักขระทั้งหมดที่ผู้ใช้จะพยายามเพิ่มลงในแบบฟอร์ม:

ในกรณีนี้ ตัวแปรใหม่ใน php จะไม่ถูกสร้าง แต่จะใช้ตัวแปรที่มีอยู่ สิ่งที่ตัวกรองจะทำคือแปลงอักขระ "<" в "<". Также он поступить с другими символами, встречающимися в html коде.

ฟังก์ชันที่สองจะถอดรหัส URL หากผู้ใช้พยายามเพิ่มลงในแบบฟอร์ม

$fio = urldecode($fio);
$email = urldecode($อีเมล์);

ด้วยฟังก์ชันที่สาม เราจะลบช่องว่างออกจากจุดเริ่มต้นและจุดสิ้นสุดของสตริง หากมี:

$fio = ตัดแต่ง ($fio);
$email = ตัดแต่ง (อีเมล $);

มีฟังก์ชั่นอื่น ๆ ที่ให้คุณกรองตัวแปร php การใช้งานขึ้นอยู่กับว่าคุณกลัวว่าผู้โจมตีจะพยายามเพิ่มรหัสโปรแกรมไปยังรูปแบบการส่งข้อมูลไปยังเมล html นี้มากน้อยเพียงใด

ตรวจสอบข้อมูลที่ส่งผ่านจากรูปแบบ HTML ไปยังไฟล์ PHP

ในการตรวจสอบว่ารหัสนี้ใช้งานได้หรือไม่ หากมีการถ่ายโอนข้อมูล คุณสามารถแสดงข้อมูลนั้นบนหน้าจอโดยใช้ฟังก์ชันเสียงสะท้อน:

ก้อง $fio;
เสียงสะท้อน "
";
สะท้อนอีเมล $;

จำเป็นต้องใช้บรรทัดที่สองที่นี่เพื่อแยกเอาต์พุตของตัวแปร php ออกเป็นบรรทัดต่างๆ

ส่งข้อมูลที่ได้รับจากฟอร์ม HTML ไปยังเมลโดยใช้ PHP

ในการส่งข้อมูลไปยังเมล คุณต้องใช้ฟังก์ชันเมลใน PHP

mail("ไปยังที่อยู่ที่จะส่ง", "หัวเรื่องของจดหมาย", "ข้อความ (เนื้อความของจดหมาย)","จาก: จากอีเมลที่ส่งจดหมาย \r\n");

ตัวอย่างเช่น คุณต้องส่งข้อมูลไปยังอีเมลของเจ้าของหรือผู้จัดการไซต์ [ป้องกันอีเมล]

หัวเรื่องของอีเมลควรชัดเจน และข้อความของอีเมลควรมีสิ่งที่ผู้ใช้ระบุไว้ในรูปแบบ HTML

จดหมาย (" [ป้องกันอีเมล]", "แอปพลิเคชันจากไซต์", "ชื่อ:".$fio". อีเมล: ".$email ," จาก: [ป้องกันอีเมล]\r\n");

คุณต้องเพิ่มเงื่อนไขที่จะตรวจสอบว่าแบบฟอร์มถูกส่งโดยใช้ PHP ไปยังที่อยู่อีเมลที่ระบุหรือไม่

ถ้า (จดหมาย (" [ป้องกันอีเมล]", "สั่งซื้อจากเว็บไซต์", "ชื่อ:".$fio". อีเมล: ".$email ," จาก: [ป้องกันอีเมล]\r\n"))
{
echo "ส่งข้อความสำเร็จ";
) อื่น (
}

ดังนั้นโค้ดโปรแกรมของไฟล์ send.php ซึ่งจะส่งข้อมูลฟอร์ม HTML ไปยังเมลจะมีลักษณะดังนี้:

$fio = $_POST["fio"];
$email = $_POST["อีเมล"];
$fio = htmlพิเศษchars($fio);
$email = htmlพิเศษchars($email);
$fio = urldecode($fio);
$email = urldecode($อีเมล์);
$fio = ตัดแต่ง ($fio);
$email = ตัดแต่ง (อีเมล $);
//เสียงสะท้อน $fio;
//เสียงสะท้อน"
";
//echo $อีเมล;
ถ้า (จดหมาย (" [ป้องกันอีเมล]", "แอปพลิเคชันจากไซต์", "ชื่อ:".$fio". อีเมล: ".$email ," จาก: [ป้องกันอีเมล]\r\n"))
( echo "ส่งข้อความสำเร็จ";
) อื่น (
echo "เกิดข้อผิดพลาดขณะส่งข้อความ";
}?>

สามบรรทัดเพื่อตรวจสอบว่าข้อมูลถูกส่งไปยังไฟล์หรือไม่ หากจำเป็น สามารถลบออกได้ เนื่องจากจำเป็นสำหรับการดีบักเท่านั้น

วางรหัสการส่งแบบฟอร์ม HTML และ PHP ในไฟล์เดียว

ในความคิดเห็นต่อบทความนี้ มีหลายคนถามถึงวิธีทำให้ทั้งฟอร์ม HTML และโค้ด PHP ในการส่งข้อมูลไปยังเมลอยู่ในไฟล์เดียว ไม่ใช่สองไฟล์

ในการดำเนินการนี้ คุณต้องวางรหัส HTML ของแบบฟอร์มในไฟล์ send.php และเพิ่มเงื่อนไขที่จะตรวจสอบการมีอยู่ของตัวแปรในอาร์เรย์ POST (อาร์เรย์นี้ถูกส่งมาจากแบบฟอร์ม) นั่นคือหากไม่มีตัวแปรในอาร์เรย์ คุณต้องแสดงฟอร์มให้ผู้ใช้เห็น มิฉะนั้น คุณต้องรับข้อมูลจากอาร์เรย์และส่งไปยังผู้รับ

มาดูวิธีการเปลี่ยนโค้ด PHP ในไฟล์ send.php:



แบบฟอร์มสมัครเว็บไซต์


//ตรวจสอบว่ามีตัวแปรอยู่ในอาร์เรย์ POST หรือไม่
if(!isset($_POST["fio"]) และ !isset($_POST["email"]))(
?>





) อื่น (
//แสดงแบบฟอร์ม
$fio = $_POST["fio"];
$email = $_POST["อีเมล"];
$fio = htmlพิเศษchars($fio);
$email = htmlพิเศษchars($email);
$fio = urldecode($fio);
$email = urldecode($อีเมล์);
$fio = ตัดแต่ง ($fio);
$email = ตัดแต่ง (อีเมล $);
ถ้า (จดหมาย (" [ป้องกันอีเมล]", "แอปพลิเคชันจากไซต์", "ชื่อ:".$fio". อีเมล: ".$email ," จาก: [ป้องกันอีเมล]\r\n"))(
echo "ส่งข้อความสำเร็จ";
) อื่น (
echo "เกิดข้อผิดพลาดขณะส่งข้อความ";
}
}
?>



เราตรวจสอบการมีอยู่ของตัวแปรในอาร์เรย์ POST ด้วยฟังก์ชัน PHP isset() เครื่องหมายอัศเจรีย์หน้าฟังก์ชันนี้ในเงื่อนไขหมายถึงการปฏิเสธ นั่นคือหากไม่มีตัวแปรเราต้องแสดงแบบฟอร์มของเรา ถ้าฉันไม่ใส่เครื่องหมายอัศเจรีย์ เงื่อนไขก็จะหมายถึง - "ถ้ามีแล้ว แสดงแบบฟอร์ม" และนี่เป็นสิ่งที่ผิดในกรณีของเรา คุณสามารถเปลี่ยนชื่อเป็น index.php ได้ หากคุณเปลี่ยนชื่อไฟล์อย่าลืมเปลี่ยนชื่อไฟล์และในบรรทัด

. แบบฟอร์มต้องลิงค์ไปหน้าเดียวกัน เช่น index.php ฉันเพิ่มชื่อหน้าลงในรหัส

ข้อผิดพลาดทั่วไปที่เกิดขึ้นเมื่อส่งแบบฟอร์ม PHP จากเว็บไซต์

ข้อแรก ข้อผิดพลาดที่ได้รับความนิยมมากที่สุดคือเมื่อคุณเห็นหน้ากระดาษว่างเปล่าที่ไม่มีข้อความ ซึ่งหมายความว่าคุณทำผิดพลาดในรหัสหน้า คุณต้องเปิดการแสดงข้อผิดพลาดทั้งหมดใน PHP จากนั้นคุณจะเห็นว่าข้อผิดพลาดเกิดขึ้นที่ใด เพิ่มในรหัส:

ini_set("display_errors","เปิด");
error_reporting("E_ALL");

ไฟล์ send.php ต้องทำงานบนเซิร์ฟเวอร์เท่านั้น มิฉะนั้นโค้ดจะไม่ทำงาน เป็นที่พึงปรารถนาว่านี่ไม่ใช่เซิร์ฟเวอร์ภายใน เนื่องจากไม่ได้กำหนดค่าให้ส่งข้อมูลไปยังเซิร์ฟเวอร์อีเมลภายนอกเสมอไป หากคุณเรียกใช้โค้ดบนเซิร์ฟเวอร์อื่นที่ไม่ใช่เซิร์ฟเวอร์ คุณจะเห็นโค้ด PHP โดยตรงบนหน้านั้น

ดังนั้น เพื่อการทำงานที่ถูกต้อง ฉันแนะนำให้วางไฟล์ send.php บนโฮสติ้งของไซต์ ตามกฎแล้วทุกอย่างได้รับการกำหนดค่าไว้แล้ว

ข้อผิดพลาดทั่วไปอีกประการหนึ่งคือเมื่อการแจ้งเตือน "ส่งข้อความสำเร็จ" ปรากฏขึ้น แต่จดหมายไม่ถึงทางไปรษณีย์ ในกรณีนี้ คุณต้องตรวจสอบบรรทัดอย่างระมัดระวัง:

ถ้า (จดหมาย (" [ป้องกันอีเมล]", "สั่งซื้อจากเว็บไซต์", "ชื่อ:".$fio". อีเมล: ".$email ," จาก: [ป้องกันอีเมล]\r\n"))

แทน [ป้องกันอีเมล] ควรเป็นที่อยู่อีเมลที่คุณต้องการส่งจดหมายถึง แต่แทนที่จะเป็น[ป้องกันอีเมล] ต้องเป็นอีเมลที่มีอยู่สำหรับไซต์นี้ ตัวอย่างเช่น สำหรับไซต์ไซต์ จะเป็น . เฉพาะในกรณีนี้จดหมายที่มีข้อมูลจากแบบฟอร์มจะถูกส่ง

อัพเดทล่าสุด: 31.10.2015

SMTP (Simple Mail Transfer Protocol) ใช้เพื่อส่งจดหมายผ่านอินเทอร์เน็ต โปรโตคอลนี้ระบุวิธีที่เมลเซิร์ฟเวอร์โต้ตอบเมื่อส่งอีเมล

เมื่อต้องการทำงานกับโปรโตคอล SMTP และส่งอีเมลใน .NET คลาส SmtpClient จากเนมสเปซ System.Net.Mail

คลาสนี้กำหนดคุณสมบัติจำนวนหนึ่งที่อนุญาตให้คุณปรับแต่งการส่ง:

    โฮสต์: เซิร์ฟเวอร์ smtp ที่ส่งเมล ตัวอย่างเช่น smtp.yandex.ru

    พอร์ต: พอร์ตที่ใช้โดยเซิร์ฟเวอร์ smp หากไม่ได้ระบุไว้ พอร์ต 25 จะถูกใช้เป็นค่าเริ่มต้น

    ข้อมูลประจำตัว: ข้อมูลการตรวจสอบผู้ส่ง

    EnableSsl: ระบุว่าจะใช้โปรโตคอล SSL เมื่อส่งหรือไม่

คลาสคีย์อื่นที่ใช้เมื่อส่งคือ MailMessage ชั้นนี้แสดงถึงข้อความที่ถูกส่ง คุณสมบัติของมันมีดังต่อไปนี้:

    ไฟล์แนบ: มีไฟล์แนบอีเมลทั้งหมด

    เนื้อความ: ข้อความของจดหมายโดยตรง

    จาก: ที่อยู่ผู้ส่ง. แสดงถึงวัตถุ MailAddress

    ถึง: ที่อยู่ของผู้รับ ยังแสดงถึงวัตถุ MailAddress

    หัวเรื่อง: กำหนดหัวเรื่องของอีเมล

    IsBodyHtml: ระบุว่าอีเมลแสดงเนื้อหาที่มีโค้ด html หรือไม่

ลองใช้คลาสเหล่านี้และส่งอีเมล:

ใช้ระบบ; ใช้ System.Net; ใช้ System.IO; ใช้ System.Threading.Tasks; ใช้ System.Net.Mail; เนมสเปซ NetConsoleApp ( โปรแกรมคลาส ( โมฆะคงที่ Main (สตริง args) ( // ผู้ส่ง - ตั้งค่าที่อยู่และชื่อที่แสดงในจดหมาย MailAddress จาก = MailAddress ใหม่ (" [ป้องกันอีเมล]", "Tom"); // เราส่ง MailAddress ไปให้ใคร = new MailAddress(" [ป้องกันอีเมล]"); // สร้างวัตถุข้อความ MailMessage m = MailMessage ใหม่ (จาก, ถึง); // หัวเรื่องเมล m.Subject = "ทดสอบ"; // ข้อความเมล m.Body = "

จดหมายทดสอบของไคลเอนต์ smtp

"; // ตัวอักษรแทนรหัส html m.IsBodyHtml = true; // ที่อยู่เซิร์ฟเวอร์ smtp และพอร์ตที่เราจะส่งจดหมาย SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); // เข้าสู่ระบบ และรหัสผ่าน smtp.Credentials = ใหม่ NetworkCredential(" [ป้องกันอีเมล]", "รหัสผ่านของฉัน"); smtp.EnableSsl = true; smtp.Send(m); Console.Read(); ) ) )

ในการส่ง จะใช้เมธอด Send() ซึ่งส่งผ่านออบเจกต์ MailMessage

เรายังสามารถใช้การส่งเวอร์ชันอะซิงโครนัสด้วยวิธี SendMailAsync:

ใช้ระบบ; ใช้ System.Net; ใช้ System.IO; ใช้ System.Threading.Tasks; ใช้ System.Net.Mail; เนมสเปซ NetConsoleApp ( โปรแกรมคลาส ( โมฆะคงที่ Main (string args) ( SendEmailAsync (). GetAwaiter (); Console.Read (); ) งาน async แบบคงที่ส่วนตัว SendEmailAsync () ( MailAddress จาก = MailAddress ใหม่ (" [ป้องกันอีเมล]", "ทอม"); MailAddress ถึง = MailAddress ใหม่ (" [ป้องกันอีเมล]"); MailMessage m = MailMessage ใหม่ (จาก, ถึง); m.Subject = "ทดสอบ"; m.Body = "จดหมายทดสอบการทำงานของไคลเอ็นต์ Smtp 2"; SmtpClient smtp = new SmtpClient("smtp.gmail.com" , 587 ); smtp.Credentials = NetworkCredential ใหม่ (" [ป้องกันอีเมล]", "mypassword"); smtp.EnableSsl = true; wait smtp.SendMailAsync(m); Console.WriteLine("จดหมายที่ส่ง"); ) ) )

เพิ่มไฟล์แนบ

เราสามารถแนบไฟล์แนบไปกับอีเมลได้โดยใช้คุณสมบัติไฟล์แนบ สิ่งที่แนบมาแต่ละรายการแสดงถึงวัตถุ System.Net.Mail.Attachment:

MailAddress จาก = MailAddress ใหม่ (" [ป้องกันอีเมล]", "ทอม"); MailAddress ถึง = MailAddress ใหม่ (" [ป้องกันอีเมล]"); MailMessage m = MailMessage ใหม่ (จาก, ถึง); m.Attachments.Add (ไฟล์แนบใหม่ ("D://temlog.txt"));

บ่อยครั้งที่คุณต้องจัดการกับการส่งอีเมลจากรหัสโปรแกรม ไม่ต้องไปหาตัวอย่างที่ไหนไกล

บทความนี้เป็นคำใบ้และไม่ได้เปิดเผยอะไรใหม่ แต่ก่อนที่จะเขียน ฉันดูคล้ายกันบนอินเทอร์เน็ตและรู้สึกประหลาดใจมากที่เกือบทุกแห่งเสนอโซลูชันที่ใช้งานไม่ได้หรือล้าสมัย หรือเขียนโดยไม่รู้หนังสือ

สิ่งแรกที่คุณไม่ควรทำกับตัวอย่างเหล่านี้คือการใช้ System.Web.Mail ซึ่งล้าสมัยไปนานแล้ว และเริ่มต้นด้วย Visual Studio 2010 คุณไม่สามารถแม้แต่เพิ่มไลบรารี System.Web โดยไม่ทราบเส้นทางแบบเต็มไปยัง DLL ที่สอดคล้องกัน
ขอเสนอให้ใช้ไลบรารี System.Net แทน
ใช้ System.Net; ใช้ System.Net.Mail;
ดังนั้น วิธีที่ง่ายที่สุด ที่สำคัญและใช้บ่อยที่สุดคือการส่งจดหมายจากเซิร์ฟเวอร์อีเมลของคุณ ซึ่งมีการกำหนดค่าไคลเอนต์ SMTP ตามที่คุณเข้าใจ เซิร์ฟเวอร์สามารถเป็นได้ทั้งเซิร์ฟเวอร์ที่แอปพลิเคชันทำงานอยู่หรือเซิร์ฟเวอร์ระยะไกลที่คุณมีสิทธิ์ส่งจดหมายโดยไม่ได้รับอนุญาตเพิ่มเติม

โค้ดตัวอย่างสำหรับการส่งอีเมลจากเครื่องโลคัล:
", "[ป้องกันอีเมล]"))( mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; โดยใช้ (SmtpClient sc = new SmtpClient("127.0.mail server and port ถ้าจำเป็น sc.Send(mm ) ) ) )

ใช้บริการอีเมลเช่น Gmail, Yandex, Mail.ru เป็นต้น ทุกอย่างเหมือนกัน เพิ่มเฉพาะพารามิเตอร์ที่มีการอนุญาตเท่านั้น

เซิร์ฟเวอร์ SMTP: smtp.gmail.com
ท่าเรือ: 587
โดยใช้ (MailMessage mm = new MailMessage("ชื่อ ", "[ป้องกันอีเมล]"))( mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.gmail.com", 587))( sc. EnableSsl = จริง sc.DeliveryMethod = SmtpDeliveryMethod.Network sc.UseDefaultCredentials = เท็จ sc.Credentials = NetworkCredential ใหม่ (" [ป้องกันอีเมล]", "GmailPassword"); sc.Send(mm); ) )

เซิร์ฟเวอร์ SMTP: smtp.yandex.ru
พอร์ต: 25
โดยใช้ (MailMessage mm = new MailMessage("ชื่อ ", "[ป้องกันอีเมล]"))( mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.yandex.ru", 25))( sc. EnableSsl = จริง sc.DeliveryMethod = SmtpDeliveryMethod.Network sc.UseDefaultCredentials = เท็จ sc.Credentials = NetworkCredential ใหม่ (" [ป้องกันอีเมล]", "YandexPassword"); sc.Send(mm); ) )

เซิร์ฟเวอร์ SMTP: smtp.mail.ru
พอร์ต: 25
โดยใช้ (MailMessage mm = new MailMessage("ชื่อ ", "[ป้องกันอีเมล]"))( mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.mail.ru", 25))( sc. EnableSsl = จริง sc.DeliveryMethod = SmtpDeliveryMethod.Network sc.UseDefaultCredentials = เท็จ sc.Credentials = NetworkCredential ใหม่ (" [ป้องกันอีเมล]", "รหัสผ่าน MailRu"); sc.Send(mm); ) )
หากกล่องจดหมายของคุณบนบริการ mail.ru ลงท้ายด้วย inbox.ru, list.ru หรือ bk.ru ที่อยู่เซิร์ฟเวอร์ SMTP จะเปลี่ยนตามไปด้วย (smtp.inbox.ru, smtp.list.ru และ smtp.bk.ru )

อย่างที่คุณเห็น ในการใช้บริการเมลอื่นในโปรแกรมของคุณ คุณจะต้องค้นหาที่อยู่และพอร์ตของเซิร์ฟเวอร์ SMTP รวมถึงกฎการให้สิทธิ์เท่านั้น

ต้องจำไว้ว่าบริการอีเมลของบุคคลที่สามเกือบทั้งหมดกำหนดจำนวนอีเมลที่ส่งในช่วงเวลาหนึ่ง

แท็ก: อีเมล, การส่งอีเมล, smtp



กำลังโหลด...
สูงสุด