JavaMail API - เซิร์ฟเวอร์ SMTP
SMTP เป็นคำย่อของ Simple Mail Transfer Protocol. เป็นมาตรฐานอินเทอร์เน็ตสำหรับการส่งจดหมายอิเล็กทรอนิกส์ (อีเมล) ผ่านเครือข่าย Internet Protocol (IP) SMTP ใช้พอร์ต TCP 25 การเชื่อมต่อ SMTP ที่ปลอดภัยโดย SSL เป็นที่รู้จักโดย SMTPS ชวเลขแม้ว่า SMTPS จะไม่ใช่โปรโตคอลในสิทธิ์ของตนเอง
JavaMail API มีแพ็คเกจ com.sun.mail.smtpซึ่งทำหน้าที่เป็นผู้ให้บริการโปรโตคอล SMTP เพื่อเข้าถึงเซิร์ฟเวอร์ SMTP ตารางต่อไปนี้แสดงรายการคลาสที่รวมอยู่ในแพ็คเกจนี้:
คลาส | คำอธิบาย |
---|---|
SMTPMessage | คลาสนี้เป็นความเชี่ยวชาญเฉพาะของคลาส MimeMessage ที่ช่วยให้คุณระบุอ็อพชันและพารามิเตอร์ SMTP ต่างๆที่จะใช้เมื่อข้อความนี้ถูกส่งผ่าน SMTP |
SMTPSSL การขนส่ง | คลาสนี้ใช้คลาสนามธรรมการขนส่งโดยใช้ SMTP ผ่าน SSL สำหรับการส่งข้อความและการขนส่ง |
SMTP การขนส่ง | คลาสนี้ใช้คลาสนามธรรมการขนส่งโดยใช้ SMTP สำหรับการส่งข้อความและการขนส่ง |
ตารางต่อไปนี้แสดงรายการข้อยกเว้นที่เกิดขึ้น:
ข้อยกเว้น | คำอธิบาย |
---|---|
SMTPAddressFailedException | ข้อยกเว้นนี้จะเกิดขึ้นเมื่อไม่สามารถส่งข้อความได้ |
SMTPAddressSucceededException | ข้อยกเว้นนี้ถูกผูกมัดกับ SendFailedException เมื่อคุณสมบัติmail.smtp.reportsuccessเป็นจริง |
SMTPSenderFailedException | ข้อยกเว้นนี้จะเกิดขึ้นเมื่อไม่สามารถส่งข้อความได้ |
SMTPSendFailedException | ข้อยกเว้นนี้จะเกิดขึ้นเมื่อไม่สามารถส่งข้อความได้ข้อยกเว้นรวมถึงที่อยู่ของผู้ส่งซึ่งเซิร์ฟเวอร์อีเมลปฏิเสธ |
com.sun.mail.smtpผู้ให้บริการใช้การตรวจสอบสิทธิ์ SMTP เป็นทางเลือก ในการใช้การตรวจสอบสิทธิ์ SMTP คุณจะต้องตั้งค่าคุณสมบัติmail.smtp.authหรือระบุชื่อผู้ใช้และรหัสผ่านสำหรับการขนส่ง SMTP เมื่อเชื่อมต่อกับเซิร์ฟเวอร์ SMTP คุณสามารถทำได้โดยใช้หนึ่งในวิธีต่อไปนี้:
ระบุอ็อบเจ็กต์ Authenticator เมื่อสร้างเซสชันเมลของคุณและระบุข้อมูลชื่อผู้ใช้และรหัสผ่านระหว่างการโทรกลับของ Authenticator คุณสมบัติmail.smtp.userสามารถตั้งค่าเพื่อระบุชื่อผู้ใช้เริ่มต้นสำหรับการโทรกลับ แต่ยังคงต้องระบุรหัสผ่านอย่างชัดเจน วิธีนี้ช่วยให้คุณใช้วิธีการส่งแบบคงที่ในการส่งข้อความ ตัวอย่างเช่น:
Transport.send(message);
เรียกเมธอด Transport connect อย่างชัดเจนด้วยอาร์กิวเมนต์ชื่อผู้ใช้และรหัสผ่าน ตัวอย่างเช่น:
Transport tr = session.getTransport("smtp");
tr.connect(smtphost, username, password);
msg.saveChanges();
tr.sendMessage(msg, msg.getAllRecipients());
tr.close();
ผู้ให้บริการโปรโตคอล SMTP สนับสนุนคุณสมบัติต่อไปนี้ซึ่งอาจถูกตั้งค่าในวัตถุ JavaMail Session คุณสมบัติจะถูกตั้งค่าเป็นสตริงเสมอ ตัวอย่างเช่น:
props.put("mail.smtp.port", "587");
ที่นี่ Type คอลัมน์อธิบายวิธีการตีความสตริง
ชื่อ | ประเภท | คำอธิบาย |
---|---|---|
mail.smtp.user | สตริง | ชื่อผู้ใช้เริ่มต้นสำหรับ SMTP |
mail.smtp.host | สตริง | เซิร์ฟเวอร์ SMTP ที่จะเชื่อมต่อ |
mail.smtp.port | int | พอร์ตเซิร์ฟเวอร์ SMTP ที่จะเชื่อมต่อหากเมธอด connect () ไม่ได้ระบุอย่างชัดเจน ค่าเริ่มต้นคือ 25 |
mail.smtp.connectiontimeout | int | ค่าหมดเวลาของการเชื่อมต่อซ็อกเก็ตเป็นมิลลิวินาที ค่าเริ่มต้นคือการหมดเวลาไม่สิ้นสุด |
mail.smtp.timeout | int | ค่าการหมดเวลาของ Socket I / O หน่วยเป็นมิลลิวินาที ค่าเริ่มต้นคือการหมดเวลาไม่สิ้นสุด |
mail.smtp.from | สตริง | ที่อยู่อีเมลที่จะใช้สำหรับคำสั่ง SMTP MAIL นี่เป็นการตั้งค่าที่อยู่สำหรับส่งคืนซองจดหมาย ค่าดีฟอลต์คือ msg.getFrom () หรือ InternetAddress.getLocalAddress () |
mail.smtp.localhost | สตริง | ชื่อโลคัลโฮสต์ที่ใช้ในคำสั่ง SMTP HELO หรือ EHLO ค่าเริ่มต้นเป็น InetAddress.getLocalHost (). getHostName () โดยปกติไม่จำเป็นต้องตั้งค่าหาก JDK และบริการชื่อของคุณได้รับการกำหนดค่าอย่างเหมาะสม |
mail.smtp.localaddress | สตริง | ที่อยู่ภายในเครื่อง (ชื่อโฮสต์) เพื่อเชื่อมโยงเมื่อสร้างซ็อกเก็ต SMTP ค่าดีฟอลต์คือแอดเดรสที่เลือกโดยคลาส Socket โดยปกติไม่ควรต้องตั้งค่า |
mail.smtp.localport | int | หมายเลขพอร์ตภายในที่จะเชื่อมโยงเมื่อสร้างซ็อกเก็ต SMTP ค่าดีฟอลต์คือหมายเลขพอร์ตที่เลือกโดยคลาส Socket |
mail.smtp.ehlo | บูลีน | หากเป็นเท็จอย่าพยายามลงชื่อเข้าใช้ด้วยคำสั่ง EHLO ค่าเริ่มต้นเป็นจริง |
mail.smtp.auth | บูลีน | หากเป็นจริงให้พยายามพิสูจน์ตัวตนผู้ใช้โดยใช้คำสั่ง AUTH ค่าเริ่มต้นเป็นเท็จ |
mail.smtp.auth.mechanisms | สตริง | หากตั้งค่าไว้รายการกลไกการตรวจสอบสิทธิ์ที่ต้องพิจารณา ระบบจะใช้เฉพาะกลไกที่เซิร์ฟเวอร์รองรับและสนับสนุนโดยการนำไปใช้งานในปัจจุบัน ค่าเริ่มต้นคือ "LOGIN PLAIN DIGEST-MD5 NTLM" ซึ่งรวมถึงกลไกการตรวจสอบสิทธิ์ทั้งหมดที่สนับสนุนโดยการใช้งานปัจจุบัน |
mail.smtp.auth.login.disable | บูลีน | หากเป็นจริงให้ป้องกันการใช้คำสั่ง AUTH LOGIN ค่าเริ่มต้นเป็นเท็จ |
mail.smtp.auth.plain.disable | บูลีน | หากเป็นจริงให้ป้องกันการใช้คำสั่ง AUTH PLAIN ค่าเริ่มต้นเป็นเท็จ |
mail.smtp.auth.digest-md5.disable | บูลีน | ถ้าเป็นจริงให้ป้องกันการใช้คำสั่ง AUTH DIGEST-MD5 ค่าเริ่มต้นเป็นเท็จ |
mail.smtp.auth.ntlm.disable | บูลีน | ถ้าเป็นจริงให้ป้องกันการใช้คำสั่ง AUTH NTLM ค่าเริ่มต้นเป็นเท็จ |
mail.smtp.auth.ntlm.domain | สตริง | โดเมนรับรองความถูกต้อง NTLM |
mail.smtp.auth.ntlm.flags | int | แฟล็กเฉพาะโปรโตคอล NTLM |
mail.smtp.submitter | สตริง | ผู้ส่งที่จะใช้ในแท็ก AUTH ในคำสั่ง MAIL FROM โดยทั่วไปจะใช้โดยรีเลย์อีเมลเพื่อส่งต่อข้อมูลเกี่ยวกับผู้ส่งต้นฉบับของข้อความ |
mail.smtp.dsn.notify | สตริง | อ็อพชัน NOTIFY สำหรับคำสั่ง RCPT ไม่เคยหรือบางอย่างผสมระหว่างความสำเร็จความล้มเหลวและความล่าช้า (คั่นด้วยเครื่องหมายจุลภาค) |
mail.smtp.dsn.ret | สตริง | ตัวเลือก RET สำหรับคำสั่ง MAIL ทั้ง FULL หรือ HDRS |
mail.smtp.sendpartial | บูลีน | หากตั้งค่าเป็นจริงและข้อความมีที่อยู่ที่ถูกต้องและบางส่วนที่ไม่ถูกต้องให้ส่งข้อความต่อไปโดยรายงานความล้มเหลวบางส่วนด้วย SendFailedException หากตั้งค่าเป็นเท็จ (ค่าเริ่มต้น) ข้อความจะไม่ถูกส่งไปยังผู้รับหากมีที่อยู่ผู้รับไม่ถูกต้อง |
mail.smtp.sasl.enable | บูลีน | หากตั้งค่าเป็น true ให้พยายามใช้แพ็กเกจ javax.security.sasl เพื่อเลือกกลไกการพิสูจน์ตัวตนสำหรับล็อกอิน ค่าเริ่มต้นเป็นเท็จ |
mail.smtp.sasl.mechanisms | สตริง | รายการที่คั่นด้วยช่องว่างหรือจุลภาคของชื่อกลไก SASL ที่จะพยายามใช้ |
mail.smtp.sasl.authorizationid | สตริง | ID การอนุญาตที่จะใช้ในการพิสูจน์ตัวตน SASL หากไม่ได้ตั้งค่า ID การพิสูจน์ตัวตน (ชื่อผู้ใช้) จะถูกใช้ |
mail.smtp.sasl.realm | สตริง | ขอบเขตที่จะใช้กับการพิสูจน์ตัวตน DIGEST-MD5 |
mail.smtp.quitwait | บูลีน | หากตั้งค่าเป็นเท็จคำสั่ง QUIT จะถูกส่งและการเชื่อมต่อจะถูกปิดทันที หากตั้งค่าเป็น true (ค่าเริ่มต้น) ทำให้การขนส่งรอการตอบสนองต่อคำสั่ง QUIT |
mail.smtp.reportsuccess | บูลีน | หากตั้งค่าเป็นจริงทำให้การขนส่งรวม SMTPAddressSucceededException สำหรับแต่ละแอดเดรสที่สำเร็จ |
mail.smtp.socketFactory | โรงงานซ็อกเก็ต | หากตั้งค่าเป็นคลาสที่ใช้อินเทอร์เฟซ javax.net.SocketFactory คลาสนี้จะถูกใช้เพื่อสร้างซ็อกเก็ต SMTP |
mail.smtp.socketFactory.class | สตริง | หากตั้งค่าให้ระบุชื่อของคลาสที่ใช้อินเตอร์เฟส javax.net.SocketFactory คลาสนี้จะใช้ในการสร้างซ็อกเก็ต SMTP |
mail.smtp.socketFactory.fallback | บูลีน | หากตั้งค่าเป็น true ความล้มเหลวในการสร้างซ็อกเก็ตโดยใช้คลาสโรงงานของซ็อกเก็ตที่ระบุจะทำให้ซ็อกเก็ตถูกสร้างขึ้นโดยใช้คลาส java.net.Socket ค่าเริ่มต้นเป็นจริง |
mail.smtp.socketFactory.port | int | ระบุพอร์ตที่จะเชื่อมต่อเมื่อใช้โรงงานซ็อกเก็ตที่ระบุ หากไม่ได้ตั้งค่าพอร์ตเริ่มต้นจะถูกใช้ |
mail.smtp.ssl.enable | บูลีน | หากตั้งค่าเป็นจริงให้ใช้ SSL เพื่อเชื่อมต่อและใช้พอร์ต SSL ตามค่าเริ่มต้น ค่าเริ่มต้นเป็นเท็จสำหรับโปรโตคอล "smtp" และเป็นจริงสำหรับโปรโตคอล "smtps" |
mail.smtp.ssl.checkserveridentity | บูลีน | หากตั้งค่าเป็น true ให้ตรวจสอบข้อมูลประจำตัวเซิร์ฟเวอร์ตามที่ระบุโดย RFC 2595 ค่าดีฟอลต์คือ false |
mail.smtp.ssl.trust | สตริง | หากตั้งค่าไว้และไม่ได้ระบุโรงงานซ็อกเก็ตให้เปิดใช้งาน MailSSLSocketFactory หากตั้งค่าเป็น "*" โฮสต์ทั้งหมดจะเชื่อถือได้ หากตั้งค่าเป็นรายการโฮสต์ที่คั่นด้วยช่องว่างโฮสต์เหล่านั้นจะเชื่อถือได้ มิฉะนั้นความน่าเชื่อถือจะขึ้นอยู่กับใบรับรองที่เซิร์ฟเวอร์นำเสนอ |
mail.smtp.ssl.socketFactory | โรงงานซ็อกเก็ต SSL | หากตั้งค่าเป็นคลาสที่ขยายคลาส javax.net.ssl.SSLSocketFactory คลาสนี้จะถูกใช้เพื่อสร้างซ็อกเก็ต SMTP SSL |
mail.smtp.ssl.socketFactory.class | สตริง | หากตั้งค่าให้ระบุชื่อของคลาสที่ขยายคลาส javax.net.ssl.SSLSocketFactory คลาสนี้จะถูกใช้เพื่อสร้างซ็อกเก็ต SMTP SSL |
mail.smtp.ssl.socketFactory.port | int | ระบุพอร์ตที่จะเชื่อมต่อเมื่อใช้โรงงานซ็อกเก็ตที่ระบุ หากไม่ได้ตั้งค่าพอร์ตเริ่มต้นจะถูกใช้ |
mail.smtp.ssl.protocols | สตริง | ระบุโปรโตคอล SSL ที่จะเปิดใช้งานสำหรับการเชื่อมต่อ SSL ค่าคุณสมบัติเป็นรายการโทเค็นที่คั่นด้วยช่องว่างซึ่งยอมรับได้สำหรับเมธอด javax.net.ssl.SSLSocket.setEnabledProtocols |
mail.smtp.starttls.enable | บูลีน | หากเป็นจริงให้เปิดใช้งานคำสั่ง STARTTLS (หากเซิร์ฟเวอร์รองรับ) เพื่อสลับการเชื่อมต่อเป็นการเชื่อมต่อที่มีการป้องกัน TLS ก่อนที่จะออกคำสั่งล็อกอินใด ๆ ค่าเริ่มต้นเป็นเท็จ |
mail.smtp.starttls.required | บูลีน | หากเป็นจริงต้องใช้คำสั่ง STARTTLS หากเซิร์ฟเวอร์ไม่รองรับคำสั่ง STARTTLS หรือคำสั่งล้มเหลววิธีการเชื่อมต่อจะล้มเหลว ค่าเริ่มต้นเป็นเท็จ |
mail.smtp.socks.host | สตริง | ระบุชื่อโฮสต์ของพร็อกซีเซิร์ฟเวอร์ SOCKS5 ที่จะใช้สำหรับการเชื่อมต่อกับเมลเซิร์ฟเวอร์ |
mail.smtp.socks.port | สตริง | ระบุหมายเลขพอร์ตสำหรับพร็อกซีเซิร์ฟเวอร์ SOCKS5 สิ่งนี้ควรใช้เฉพาะในกรณีที่พร็อกซีเซิร์ฟเวอร์ไม่ได้ใช้หมายเลขพอร์ตมาตรฐาน 1080 |
mail.smtp.mailextension | สตริง | สตริงส่วนขยายที่จะต่อท้ายคำสั่ง MAIL |
mail.smtp.userset | บูลีน | หากตั้งค่าเป็นจริงให้ใช้คำสั่ง RSET แทนคำสั่ง NOOP ในเมธอด isConnected ในบางกรณี sendmail จะตอบสนองช้าหลังจากคำสั่ง NOOP หลาย ๆ การใช้ RSET ช่วยหลีกเลี่ยงปัญหาการส่งอีเมลนี้ ค่าเริ่มต้นเป็นเท็จ |
โดยทั่วไปแอปพลิเคชันไม่ควรใช้คลาสในแพ็คเกจนี้โดยตรง ควรใช้ API ที่กำหนดโดยแพ็คเกจ javax.mail (และแพ็กเกจย่อย) แทน ตัวอย่างเช่นแอปพลิเคชันไม่ควรสร้างอินสแตนซ์ของ SMTPTransport โดยตรง แต่ควรใช้เมธอดเซสชัน getTransport เพื่อรับอ็อบเจ็กต์ Transport ที่เหมาะสม
ตัวอย่างการใช้งานเซิร์ฟเวอร์ SMPT จะแสดงให้เห็นในบทที่ส่งอีเมล์