ฉันสรุปคำอธิบายของอีเมลหลายประเภท: 1. เครือข่าย; 2. ไฟร์วอลล์; ได้รับการเยียวยาในบทความต่อไปนี้
ขณะนี้กล่องจดหมายของ บริษัท กำลังใช้ Zimbra หลังจากการทดสอบทุก ๆ 100 เมลสามารถส่งได้สำเร็จประมาณ 98 ส่วนต่อไปนี้เป็นข้อมูลการทดสอบ:
กรณีทดสอบ 1: 100 SEAL เวลาทั้งหมดเกี่ยวกับ: 16 นาที;
กรณีทดสอบ 2: 100 ปิดผนึกเวลาทั้งหมดประมาณ 16 นาที เพิ่มกลไกความล้มเหลวสำหรับความล้มเหลวรอ 10s ที่จะออกอีกครั้งหลังจากความล้มเหลวสูงสุด 3 ครั้ง;
กรณีทดสอบ 3: แต่ละส่วนออกมาอยู่ 10 วินาทีและใช้เวลาทั้งหมด 32 นาที;
สำหรับปัญหาของ MessagingException คุณสามารถอ้างถึง:
javax.mail.messagingException: ไม่สามารถเชื่อมต่อกับโฮสต์ SMTP
ในการตอบสนองต่อปัญหาประเภทนี้ฉันได้เพิ่มอีเมลเพื่อส่งกลับอีกครั้ง
if (sendhtmlmail_ (mail)) {return true;} else {int i = 0; InterruptedException E) {logger.error ("พึ่งพาข้อผิดพลาดทางเมล", e);}} ส่งคืนจริง;} อย่างไรก็ตามกลไกนี้ทำให้เกิดปัญหาใหม่ ทางอีเมลและส่วนหนึ่งของอีเมล
ในการตอบสนองต่อปัญหาข้างต้นเราจะลบกลไกการออกใหม่และลบออกสำหรับอีเมลที่ผิดกฎหมายเท่านั้น (นั่นคือที่อยู่อีเมลที่ไม่มีอยู่บนเซิร์ฟเวอร์) จากนั้นส่งหลังจากลบออก ความล้มเหลวในการส่งอีเมลที่เกิดจากเหตุผลอื่นจะไม่ถูกออกอีกครั้ง (ปัญหาจะรายงานต่อผู้ผลิตผ่านแผนกปฏิบัติการและการบำรุงรักษาเซิร์ฟเวอร์จดหมาย)
ต่อไปนี้เป็นตรรกะของการพิจารณาว่าจดหมายนั้นถูกกฎหมายหรือไม่:
1. SMTP อยู่ในสองกรณี: ก่อนอื่นอีเมลจะถูกส่งจากไคลเอนต์ไปยังเซิร์ฟเวอร์
2. SMTP เป็นโปรโตคอลการร้องขอ/การตอบสนอง การตอบกลับรวมถึงรหัสสามตัวที่แสดงถึงสถานะการส่งคืน
3. SMTP ที่ข้อตกลง TCP หมายเลข 25 คำขอตรวจสอบปาก
4. การเชื่อมต่อและกระบวนการส่ง
โปรโตคอล SMTP ไม่ซับซ้อนหรือซับซ้อนและเป็นเรื่องง่ายถ้าคุณรู้จักซ็อกเก็ต แต่ตอนนี้เป็นเพียงสิ่งที่เราใช้ในบทความแรกจากไคลเอนต์ที่ส่งไปยังเซิร์ฟเวอร์
5 ขั้นตอนของการดำเนินการมีดังนี้:
พอร์ต 25 เชื่อมต่อกับเซิร์ฟเวอร์ (หากไม่มีบริการเมลแม้แต่การเชื่อมต่อสีขาว)
ส่งคำอวยพร HELO ส่งจดหมายจากคำสั่ง
ส่งคำสั่ง RCPT ไปที่
รหัสเฉพาะมีดังนี้:
นำเข้า Java.io.*; นำเข้า Java.net.*; สายสตริง = null; ข้อความ) IOException {wr .write (text + "/r/n"); = ใหม่ hashtable (); env.put ("java.naming.factory.initial", "com.sun.jndi.dns.dnscontextfactory"); }); | การโยน namingexcepti (บน (บน "No Match for name '" + hostname + "'");} // huzzah! เรามี machnes ที่จะลอง nt เป็นอย่างแน่นอน // ถูกต้องสิ่งนี้ถูกทิ้งไว้เป็น anrcise สำหรับทุกคนที่ใส่ใจ arraylist res = new ArrayList (); ******************************************************** ******************************************************** ******************************************************** ******************************************************** *, (f [1] .ndswith (".") mailhost = f [1] .substring (0, (f [1]. () - 1)); else mailhost = f [1]; // การแก้ไข **************** res.add (Maylhost);} return res;} public public boolean isaddressvalid (ที่อยู่สตริง) {// ค้นหา separtor ชื่อ dmain int int pos = ที่อยู่ indexof ('@'); Xchangers String domain = address.substring (++ pos); arraylist mxlist = null; // ที่อยู่คือค่า แต่ถ้าเราทำไม่ได้มันเป็นสัญญาณว่าไม่ใช่ถ้า (mxlist.size () == 0) ส่งคืนเท็จ; รับ // ความรับผิดชอบเชิงบวก ome // เพื่อพิจารณาการตั้งค่า ; rgagnon.com "); res = ได้ยิน (rdr); ถ้า (res! = 250) โยนข้อยกเว้นใหม่ (" "ไม่ใช่ esmtp"); .com> "); res = ได้ยิน (rdr); ถ้า (res! = 250) การขว้างข้อยกเว้นใหม่ (" ผู้ส่ง ted "); พูด (wtr," rcpt ถึง: <" + ที่อยู่ +"> ">"); Res = Hear (RDR); "ที่อยู่ไม่ใช่ค่า! ;} ในที่สุด {ถ้า (ถูกต้อง) ส่งคืน true;}} atic public atic void main (string args []) {String testData [] = {"[email protected]", "[email protected]", "ที่อยู่รัฐบาล" [email protected] "// ความล้มเหลวของวิธีนี้}; สำหรับ (int ctr = 0; ctr <testdata.length; ctr ++) {system.out.println (ctr] +" vali d? " +isaddressvalid ( testData [ctr]);} return;}}ข้างต้นเป็นตรรกะของการพิจารณาว่าที่อยู่อีเมลนั้นถูกกฎหมายหรือไม่
สตริงคงที่ [] removeInvalidateDeddress (String [] ที่อยู่, String MailFrom) {ArrayList <String> ValidateDedDresses = arrayList ใหม่ <String> (); ) || null == ที่อยู่) {ส่งคืนสตริงใหม่ [0];} string sendcmd = "จดหมายจาก:" + normalizeaddress (mailfrom); (); รหัส = smpttrans.simplecommand (sendcmd); NormalAddress = Normalizeaddress (ที่อยู่); } catch (messagingException e) {logger.error ("ตรวจสอบข้อผิดพลาดที่อยู่อีเมลส่งจาก" + mailfrom, e); !ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้