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ıfAçıklama
SMTPMessageBu 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.
SMTPSSLTransportBu sınıf, ileti gönderme ve taşıma için SSL üzerinden SMTP kullanarak Aktarım soyut sınıfını uygular.
SMTPTransportBu 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:

İstisnaAçıklama
SMTPAddressFailedExceptionBu istisna, mesaj gönderilemediğinde atılır.
SMTPAddressSucceededExceptionBu özel durum, mail.smtp.reportsuccess özelliği true olduğunda bir SendFailedException zincirine bağlanır .
SMTPSenderFailedExceptionBu istisna, mesaj gönderilemediğinde atılır.
SMTPSendFailedExceptionBu 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.

İsimTürAçıklama
mail.smtp.userDizeSMTP için varsayılan kullanıcı adı.
mail.smtp.hostDizeBağlanılacak SMTP sunucusu.
mail.smtp.portintConnect () yöntemi açıkça bir tane belirtmiyorsa, bağlanılacak SMTP sunucusu bağlantı noktası. 25 varsayılan.
mail.smtp.connectiontimeoutintMilisaniye cinsinden soket bağlantısı zaman aşımı değeri. Varsayılan sonsuz zaman aşımıdır.
mail.smtp.timeoutintMilisaniye cinsinden soket G / Ç zaman aşımı değeri. Varsayılan sonsuz zaman aşımıdır.
mail.smtp.fromDizeSMTP MAIL komutu için kullanılacak e-posta adresi. Bu, zarf iade adresini belirler. Msg.getFrom () veya InternetAddress.getLocalAddress () varsayılanları.
mail.smtp.localhostDizeSMTP 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.localaddressDizeSMTP 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.localportintSMTP 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.ehloBooleYanlışsa, EHLO komutuyla oturum açmaya çalışmayın. Varsayılan değer doğrudur.
mail.smtp.authBooleDoğruysa, AUTH komutunu kullanarak kullanıcının kimliğini doğrulamaya çalışın. Varsayılan olarak yanlıştır.
mail.smtp.auth.mechanisms DizeAyarlanmış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 BooleTrue ise, AUTH LOGIN komutunun kullanılmasını engeller. Varsayılan yanlıştır.
mail.smtp.auth.plain.disableBooleTrue ise, AUTH PLAIN komutunun kullanılmasını engeller. Varsayılan yanlıştır.
mail.smtp.auth.digest-md5.disableBooleDoğruysa, AUTH DIGEST-MD5 komutunun kullanılmasını engeller. Varsayılan yanlıştır.
mail.smtp.auth.ntlm.disableBooleDoğruysa, AUTH NTLM komutunun kullanılmasını engeller. Varsayılan yanlıştır.
mail.smtp.auth.ntlm.domainDizeNTLM kimlik doğrulama alanı.
mail.smtp.auth.ntlm.flagsintNTLM protokolüne özgü bayraklar.
mail.smtp.submitter DizeMAIL 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 DizeRCPT 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.retDizeMAIL komutunun RET seçeneği. Tam veya HDRS.
mail.smtp.sendpartialBooleTrue 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.enableBooleTrue 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.mechanismsDizeKullanılmaya çalışılacak SASL mekanizma adlarının boşluk veya virgülle ayrılmış listesi.
mail.smtp.sasl.authorizationid DizeSASL kimlik doğrulamasında kullanılacak yetkilendirme kimliği. Ayarlanmazsa, kimlik doğrulama kimliği (kullanıcı adı) kullanılır.
mail.smtp.sasl.realmDizeDIGEST-MD5 kimlik doğrulamasıyla kullanılacak bölge.
mail.smtp.quitwait BooleYanlış 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 BooleTrue 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.classDizeAyarlanı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.fallbackBooleTrue 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 intBelirtilen 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.enableBooleTrue 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.checkserveridentityBooleTrue olarak ayarlanırsa, RFC 2595 tarafından belirtildiği gibi sunucu kimliğini kontrol eder. Varsayılan olarak false.
mail.smtp.ssl.trust DizeAyarlanmış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.classDizeAyarlanı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.portintBelirtilen 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 diziSSL 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 BooleDoğ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.requiredBooleDoğ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.hostdiziPosta sunucusuna bağlantılar için kullanılacak SOCKS5 proxy sunucusunun ana bilgisayar adını belirtir.
mail.smtp.socks.port diziSOCKS5 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.mailextensionDizeMAIL komutuna eklenecek uzantı dizesi.
mail.smtp.usersetBooleTrue 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 .