JavaMail API - SMTP Sunucuları
SMTP kısaltmasıdır Simple Mail Transfer Protocol. İnternet Protokolü (IP) ağları üzerinden elektronik posta (e-posta) iletimi için bir İnternet standardıdır. SMTP, TCP bağlantı noktası 25'i kullanır. SSL ile güvenli hale getirilen SMTP bağlantıları, SMTPS kısaltmasıyla bilinir, ancak SMTPS kendi başına bir protokol değildir.
JavaMail API'nin paketi var com.sun.mail.smtpSMTP sunucusuna erişmek için SMTP protokol sağlayıcısı görevi gören. Aşağıdaki tablo, bu pakette bulunan sınıfları listeler:
Sınıf | Açıklama |
---|---|
SMTPMessage | Bu sınıf, bu mesaj SMTP üzerinden gönderildiğinde kullanılacak çeşitli SMTP seçeneklerini ve parametrelerini belirlemenize olanak tanıyan MimeMessage sınıfının bir uzmanlığıdır. |
SMTPSSLTransport | Bu sınıf, ileti gönderme ve taşıma için SSL üzerinden SMTP kullanarak Aktarım soyut sınıfını uygular. |
SMTPTransport | Bu sınıf, ileti gönderme ve taşıma için SMTP kullanarak Transport soyut sınıfını uygular. |
Aşağıdaki tablo, atılan istisnaları listeler:
İstisna | Açıklama |
---|---|
SMTPAddressFailedException | Bu istisna, mesaj gönderilemediğinde atılır. |
SMTPAddressSucceededException | Bu özel durum, mail.smtp.reportsuccess özelliği true olduğunda bir SendFailedException zincirine bağlanır . |
SMTPSenderFailedException | Bu istisna, mesaj gönderilemediğinde atılır. |
SMTPSendFailedException | Bu istisna, mesaj gönderilemediğinde atılır. İstisna, posta sunucusunun reddettiği gönderenin adresini içerir. |
com.sun.mail.smtpsağlayıcı isteğe bağlı olarak SMTP Kimlik Doğrulamasını kullanır. SMTP kimlik doğrulamasını kullanmak için, mail.smtp.auth özelliğini ayarlamanız veya SMTP sunucusuna bağlanırken SMTP Aktarımına bir kullanıcı adı ve parola sağlamanız gerekir. Bunu aşağıdaki yaklaşımlardan birini kullanarak yapabilirsiniz:
Posta Oturumunuzu oluştururken bir Authenticator nesnesi sağlayın ve Authenticator geri araması sırasında kullanıcı adı ve şifre bilgilerini sağlayın. mail.smtp.user özelliği, geri arama için varsayılan bir kullanıcı adı sağlayacak şekilde ayarlanabilir, ancak parolanın yine de açıkça belirtilmesi gerekir. Bu yaklaşım, mesaj göndermek için statik Transport gönderme yöntemini kullanmanıza olanak tanır. Örneğin:
Transport.send(message);
Kullanıcı adı ve parola bağımsız değişkenleriyle Transport connect yöntemini açıkça çağırın. Örneğin:
Transport tr = session.getTransport("smtp");
tr.connect(smtphost, username, password);
msg.saveChanges();
tr.sendMessage(msg, msg.getAllRecipients());
tr.close();
SMTP protokol sağlayıcısı, JavaMail Session nesnesinde ayarlanabilen aşağıdaki özellikleri destekler. Özellikler her zaman dizeler olarak ayarlanır. Örneğin:
props.put("mail.smtp.port", "587");
İşte Type sütunu dizenin nasıl yorumlandığını açıklar.
İsim | Tür | Açıklama |
---|---|---|
mail.smtp.user | Dize | SMTP için varsayılan kullanıcı adı. |
mail.smtp.host | Dize | Bağlanılacak SMTP sunucusu. |
mail.smtp.port | int | Connect () yöntemi açıkça bir tane belirtmiyorsa, bağlanılacak SMTP sunucusu bağlantı noktası. 25 varsayılan. |
mail.smtp.connectiontimeout | int | Milisaniye cinsinden soket bağlantısı zaman aşımı değeri. Varsayılan sonsuz zaman aşımıdır. |
mail.smtp.timeout | int | Milisaniye cinsinden soket G / Ç zaman aşımı değeri. Varsayılan sonsuz zaman aşımıdır. |
mail.smtp.from | Dize | SMTP MAIL komutu için kullanılacak e-posta adresi. Bu, zarf iade adresini belirler. Msg.getFrom () veya InternetAddress.getLocalAddress () varsayılanları. |
mail.smtp.localhost | Dize | SMTP HELO veya EHLO komutunda kullanılan yerel ana bilgisayar adı. InetAddress.getLocalHost (). GetHostName () için varsayılanlar. JDK'nız ve ad hizmetiniz doğru bir şekilde yapılandırılmışsa normalde ayarlanması gerekmez. |
mail.smtp.localaddress | Dize | SMTP soketi oluşturulurken bağlanılacak yerel adres (ana bilgisayar adı). Socket sınıfı tarafından seçilen adrese varsayılanlar. Normalde ayarlanmasına gerek yoktur. |
mail.smtp.localport | int | SMTP soketi oluştururken bağlanılacak yerel bağlantı noktası numarası. Socket sınıfı tarafından seçilen bağlantı noktası numarasına varsayılanlar. |
mail.smtp.ehlo | Boole | Yanlışsa, EHLO komutuyla oturum açmaya çalışmayın. Varsayılan değer doğrudur. |
mail.smtp.auth | Boole | Doğruysa, AUTH komutunu kullanarak kullanıcının kimliğini doğrulamaya çalışın. Varsayılan olarak yanlıştır. |
mail.smtp.auth.mechanisms | Dize | Ayarlanmışsa, dikkate alınacak kimlik doğrulama mekanizmalarını listeler. Yalnızca sunucu tarafından desteklenen ve mevcut uygulama tarafından desteklenen mekanizmalar kullanılacaktır. Varsayılan, geçerli uygulama tarafından desteklenen tüm kimlik doğrulama mekanizmalarını içeren "LOGIN PLAIN DIGEST-MD5 NTLM" dir. |
mail.smtp.auth.login.disable | Boole | True ise, AUTH LOGIN komutunun kullanılmasını engeller. Varsayılan yanlıştır. |
mail.smtp.auth.plain.disable | Boole | True ise, AUTH PLAIN komutunun kullanılmasını engeller. Varsayılan yanlıştır. |
mail.smtp.auth.digest-md5.disable | Boole | Doğruysa, AUTH DIGEST-MD5 komutunun kullanılmasını engeller. Varsayılan yanlıştır. |
mail.smtp.auth.ntlm.disable | Boole | Doğruysa, AUTH NTLM komutunun kullanılmasını engeller. Varsayılan yanlıştır. |
mail.smtp.auth.ntlm.domain | Dize | NTLM kimlik doğrulama alanı. |
mail.smtp.auth.ntlm.flags | int | NTLM protokolüne özgü bayraklar. |
mail.smtp.submitter | Dize | MAIL FROM komutundaki AUTH etiketinde kullanılacak gönderen. Genellikle bir posta aktarıcısı tarafından iletinin orijinal göndericisi hakkındaki bilgileri iletmek için kullanılır. |
mail.smtp.dsn.notify | Dize | RCPT komutuna NOTIFY seçeneği. HİÇBİR ZAMAN veya BAŞARI, BAŞARISIZLIK ve GECİKME'nin (virgülle ayrılmış) bir kombinasyonu. |
mail.smtp.dsn.ret | Dize | MAIL komutunun RET seçeneği. Tam veya HDRS. |
mail.smtp.sendpartial | Boole | True olarak ayarlanmışsa ve bir mesajın bazı geçerli ve bazı geçersiz adresleri varsa, mesajı yine de gönderin ve kısmi başarısızlığı bir SendFailedException ile bildirin. Yanlış (varsayılan) olarak ayarlanırsa, geçersiz bir alıcı adresi varsa mesaj alıcıların hiçbirine gönderilmez. |
mail.smtp.sasl.enable | Boole | True olarak ayarlanırsa, oturum açmak için bir kimlik doğrulama mekanizması seçmek üzere javax.security.sasl paketini kullanmayı deneyin. Varsayılan olarak yanlıştır. |
mail.smtp.sasl.mechanisms | Dize | Kullanılmaya çalışılacak SASL mekanizma adlarının boşluk veya virgülle ayrılmış listesi. |
mail.smtp.sasl.authorizationid | Dize | SASL kimlik doğrulamasında kullanılacak yetkilendirme kimliği. Ayarlanmazsa, kimlik doğrulama kimliği (kullanıcı adı) kullanılır. |
mail.smtp.sasl.realm | Dize | DIGEST-MD5 kimlik doğrulamasıyla kullanılacak bölge. |
mail.smtp.quitwait | Boole | Yanlış olarak ayarlanırsa, QUIT komutu gönderilir ve bağlantı hemen kapatılır. True olarak ayarlanırsa (varsayılan), aktarımın QUIT komutuna yanıtı beklemesine neden olur. |
mail.smtp.reportsuccess | Boole | True olarak ayarlanırsa, aktarımın başarılı olan her adres için bir SMTPAddressSucceededException içermesine neden olur. |
mail.smtp.socketFactory | Priz Fabrikası | Javax.net.SocketFactory arabirimini uygulayan bir sınıfa ayarlanırsa, bu sınıf SMTP soketleri oluşturmak için kullanılacaktır. |
mail.smtp.socketFactory.class | Dize | Ayarlanırsa, javax.net.SocketFactory arabirimini uygulayan bir sınıfın adını belirtir. Bu sınıf, SMTP soketleri oluşturmak için kullanılacaktır. |
mail.smtp.socketFactory.fallback | Boole | True olarak ayarlanırsa, belirtilen soket fabrika sınıfını kullanarak bir soket oluşturulamaması, soketin java.net.Socket sınıfı kullanılarak oluşturulmasına neden olur. Varsayılan değer doğrudur. |
mail.smtp.socketFactory.port | int | Belirtilen soket fabrikası kullanılırken bağlanılacak bağlantı noktasını belirtir. Ayarlanmazsa, varsayılan bağlantı noktası kullanılacaktır. |
mail.smtp.ssl.enable | Boole | True olarak ayarlanmışsa, bağlanmak için SSL kullanın ve varsayılan olarak SSL bağlantı noktasını kullanın. Varsayılan "smtp" protokolü için false ve "smtps" protokolü için true. |
mail.smtp.ssl.checkserveridentity | Boole | True olarak ayarlanırsa, RFC 2595 tarafından belirtildiği gibi sunucu kimliğini kontrol eder. Varsayılan olarak false. |
mail.smtp.ssl.trust | Dize | Ayarlanmışsa ve bir soket fabrikası belirtilmemişse, MailSSLSocketFactory'nin kullanımını etkinleştirir. "*" Olarak ayarlanırsa, tüm ana bilgisayarlara güvenilir. Boşluklarla ayrılmış bir ana bilgisayar listesine ayarlanırsa, bu ana bilgisayarlar güvenilirdir. Aksi takdirde güven, sunucunun sunduğu sertifikaya bağlıdır. |
mail.smtp.ssl.socketFactory | SSL Soket Fabrikası | Javax.net.ssl.SSLSocketFactory sınıfını genişleten bir sınıfa ayarlanırsa, bu sınıf SMTP SSL soketleri oluşturmak için kullanılacaktır. |
mail.smtp.ssl.socketFactory.class | Dize | Ayarlanırsa, javax.net.ssl.SSLSocketFactory sınıfını genişleten bir sınıfın adını belirtir. Bu sınıf, SMTP SSL soketleri oluşturmak için kullanılacaktır. |
mail.smtp.ssl.socketFactory.port | int | Belirtilen soket fabrikası kullanılırken bağlanılacak bağlantı noktasını belirtir. Ayarlanmazsa, varsayılan bağlantı noktası kullanılacaktır. |
mail.smtp.ssl.protocols | dizi | SSL bağlantıları için etkinleştirilecek SSL protokollerini belirtir. Özellik değeri, javax.net.ssl.SSLSocket.setEnabledProtocols yöntemi için kabul edilebilir belirteçlerin boşluklarla ayrılmış bir listesidir. |
mail.smtp.starttls.enable | Boole | Doğruysa, herhangi bir oturum açma komutu vermeden önce bağlantıyı TLS korumalı bağlantıya geçirmek için STARTTLS komutunun (sunucu tarafından destekleniyorsa) kullanımını etkinleştirir. Varsayılan olarak yanlıştır. |
mail.smtp.starttls.required | Boole | Doğruysa, STARTTLS komutunun kullanılmasını gerektirir. Sunucu STARTTLS komutunu desteklemiyorsa veya komut başarısız olursa, bağlantı yöntemi başarısız olur. Varsayılan olarak yanlıştır. |
mail.smtp.socks.host | dizi | Posta sunucusuna bağlantılar için kullanılacak SOCKS5 proxy sunucusunun ana bilgisayar adını belirtir. |
mail.smtp.socks.port | dizi | SOCKS5 proxy sunucusu için bağlantı noktası numarasını belirtir. Bunun yalnızca proxy sunucusu standart bağlantı noktası numarası 1080'i kullanmıyorsa kullanılması gerekir. |
mail.smtp.mailextension | Dize | MAIL komutuna eklenecek uzantı dizesi. |
mail.smtp.userset | Boole | True olarak ayarlanırsa, isConnected yönteminde NOOP komutu yerine RSET komutunu kullanın. Bazı durumlarda sendmail, birçok NOOP komutundan sonra yavaş yanıt verir; RSET kullanımı bu sendmail sorununu önler. Varsayılan olarak yanlıştır. |
Genel olarak uygulamaların bu paketteki sınıfları doğrudan kullanmasına gerek olmamalıdır. Bunun yerine, javax.mail paketi (ve alt paketler) tarafından tanımlanan API'leri kullanmalıdırlar. Örneğin, uygulamaların hiçbir zaman doğrudan SMTPTransport örneklerini oluşturmaması gerektiğini varsayalım. Bunun yerine, uygun bir Taşıma nesnesi edinmek için Session yöntemini getTransport kullanmalıdırlar.
SMPT sunucusunu kullanma örnekleri, E-posta Gönderme bölümünde gösterilmiştir .