API JavaMail - Server SMTP
SMTP è l'acronimo di Simple Mail Transfer Protocol. È uno standard Internet per la trasmissione di posta elettronica (e-mail) su reti IP (Internet Protocol). SMTP utilizza la porta TCP 25. Le connessioni SMTP protette da SSL sono note con l'abbreviazione SMTPS, sebbene SMTPS non sia un protocollo a sé stante.
L'API JavaMail ha un pacchetto com.sun.mail.smtpche agiscono come provider di protocollo SMTP per accedere a un server SMTP. La tabella seguente elenca le classi incluse in questo pacchetto:
Classe | Descrizione |
---|---|
SMTPMessage | Questa classe è una specializzazione della classe MimeMessage che consente di specificare varie opzioni e parametri SMTP che verranno utilizzati quando questo messaggio viene inviato tramite SMTP. |
SMTPSSLTransport | Questa classe implementa la classe astratta Transport utilizzando SMTP su SSL per l'invio e il trasporto dei messaggi. |
SMTPTransport | Questa classe implementa la classe astratta Transport utilizzando SMTP per l'invio e il trasporto dei messaggi. |
La tabella seguente elenca le eccezioni generate:
Eccezione | Descrizione |
---|---|
SMTPAddressFailedException | Questa eccezione viene generata quando il messaggio non può essere inviato. |
SMTPAddressSucceededException | Questa eccezione è concatenata da SendFailedException quando la proprietà mail.smtp.reportsuccess è true. |
SMTPSenderFailedException | Questa eccezione viene generata quando il messaggio non può essere inviato. |
SMTPSendFailedException | Questa eccezione viene generata quando il messaggio non può essere inviato. L'eccezione include l'indirizzo del mittente, che il server di posta ha rifiutato. |
Il com.sun.mail.smtpprovider utilizza l'autenticazione SMTP facoltativamente. Per utilizzare l'autenticazione SMTP è necessario impostare la proprietà mail.smtp.auth o fornire al trasporto SMTP un nome utente e una password quando ci si connette al server SMTP. Puoi farlo utilizzando uno dei seguenti approcci:
Fornire un oggetto Authenticator durante la creazione della sessione di posta e fornire le informazioni su nome utente e password durante la richiamata Authenticator. La proprietà mail.smtp.user può essere impostata per fornire un nome utente predefinito per la richiamata, ma la password dovrà comunque essere fornita esplicitamente. Questo approccio consente di utilizzare il metodo di invio di trasporto statico per inviare messaggi. Per esempio:
Transport.send(message);
Chiama il metodo di connessione di trasporto in modo esplicito con argomenti di nome utente e password. Per esempio:
Transport tr = session.getTransport("smtp");
tr.connect(smtphost, username, password);
msg.saveChanges();
tr.sendMessage(msg, msg.getAllRecipients());
tr.close();
Il provider del protocollo SMTP supporta le seguenti proprietà, che possono essere impostate nell'oggetto JavaMail Session. Le proprietà sono sempre impostate come stringhe. Per esempio:
props.put("mail.smtp.port", "587");
Qui il file Type colonna descrive come viene interpretata la stringa.
Nome | genere | Descrizione |
---|---|---|
mail.smtp.user | Corda | Nome utente predefinito per SMTP. |
mail.smtp.host | Corda | Il server SMTP a cui connettersi. |
mail.smtp.port | int | La porta del server SMTP a cui connettersi, se il metodo connect () non ne specifica esplicitamente una. Il valore predefinito è 25. |
mail.smtp.connectiontimeout | int | Valore di timeout della connessione socket in millisecondi. L'impostazione predefinita è timeout infinito. |
mail.smtp.timeout | int | Valore timeout I / O socket in millisecondi. L'impostazione predefinita è timeout infinito. |
mail.smtp.from | Corda | Indirizzo e-mail da utilizzare per il comando MAIL SMTP. Questo imposta l'indirizzo di ritorno della busta. Il valore predefinito è msg.getFrom () o InternetAddress.getLocalAddress (). |
mail.smtp.localhost | Corda | Nome host locale utilizzato nel comando SMTP HELO o EHLO. Il valore predefinito è InetAddress.getLocalHost (). GetHostName (). Normalmente non dovrebbe essere necessario impostare se il JDK e il servizio di denominazione sono configurati correttamente. |
mail.smtp.localaddress | Corda | Indirizzo locale (nome host) a cui collegarsi durante la creazione del socket SMTP. Il valore predefinito è l'indirizzo scelto dalla classe Socket. Normalmente non dovrebbe essere necessario impostare. |
mail.smtp.localport | int | Numero di porta locale a cui collegarsi durante la creazione del socket SMTP. Il valore predefinito è il numero di porta selezionato dalla classe Socket. |
mail.smtp.ehlo | booleano | Se falso, non tentare di collegarsi con il comando EHLO. Il valore predefinito è vero. |
mail.smtp.auth | booleano | Se true, prova ad autenticare l'utente utilizzando il comando AUTH. Il valore predefinito è false. |
mail.smtp.auth.mechanisms | Corda | Se impostato, elenca i meccanismi di autenticazione da considerare. Verranno utilizzati solo i meccanismi supportati dal server e supportati dall'attuale implementazione. L'impostazione predefinita è "LOGIN PLAIN DIGEST-MD5 NTLM", che include tutti i meccanismi di autenticazione supportati dall'attuale implementazione. |
mail.smtp.auth.login.disable | booleano | Se vero, impedisce l'uso del comando AUTH LOGIN. L'impostazione predefinita è false. |
mail.smtp.auth.plain.disable | booleano | Se true, impedisce l'uso del comando AUTH PLAIN. L'impostazione predefinita è false. |
mail.smtp.auth.digest-md5.disable | booleano | Se vero, impedisce l'uso del comando AUTH DIGEST-MD5. L'impostazione predefinita è false. |
mail.smtp.auth.ntlm.disable | booleano | Se true, impedisce l'utilizzo del comando AUTH NTLM. L'impostazione predefinita è false. |
mail.smtp.auth.ntlm.domain | Corda | Il dominio di autenticazione NTLM. |
mail.smtp.auth.ntlm.flags | int | Flag specifici del protocollo NTLM. |
mail.smtp.submitter | Corda | Il mittente da utilizzare nel tag AUTH nel comando MAIL FROM. Tipicamente utilizzato da un relay di posta per trasmettere informazioni sul mittente originale del messaggio. |
mail.smtp.dsn.notify | Corda | L'opzione NOTIFICA al comando RCPT. O MAI o una combinazione di SUCCESS, FAILURE e DELAY (separati da virgole). |
mail.smtp.dsn.ret | Corda | L'opzione RET al comando MAIL. O FULL o HDRS. |
mail.smtp.sendpartial | booleano | Se impostato su true e un messaggio ha alcuni indirizzi validi e altri non validi, invia il messaggio comunque, segnalando l'errore parziale con SendFailedException. Se impostato su false (impostazione predefinita), il messaggio non viene inviato a nessuno dei destinatari se è presente un indirizzo del destinatario non valido. |
mail.smtp.sasl.enable | booleano | Se impostato su true, provare a utilizzare il pacchetto javax.security.sasl per scegliere un meccanismo di autenticazione per l'accesso. Il valore predefinito è false. |
mail.smtp.sasl.mechanisms | Corda | Uno spazio o un elenco separato da virgole di nomi di meccanismi SASL da provare a utilizzare. |
mail.smtp.sasl.authorizationid | Corda | L'ID di autorizzazione da utilizzare nell'autenticazione SASL. Se non impostato, viene utilizzato l'ID di autenticazione (nome utente). |
mail.smtp.sasl.realm | Corda | Il regno da utilizzare con l'autenticazione DIGEST-MD5. |
mail.smtp.quitwait | booleano | Se impostato su false, viene inviato il comando QUIT e la connessione viene immediatamente chiusa. Se impostato su true (impostazione predefinita), il trasporto attende la risposta al comando QUIT. |
mail.smtp.reportsuccess | booleano | Se impostato su true, fa in modo che il trasporto includa un'eccezione SMTPAddressSucceededException per ogni indirizzo che ha esito positivo. |
mail.smtp.socketFactory | Fabbrica di prese | Se impostata su una classe che implementa l'interfaccia javax.net.SocketFactory, questa classe verrà utilizzata per creare socket SMTP. |
mail.smtp.socketFactory.class | Corda | Se impostato, specifica il nome di una classe che implementa l'interfaccia javax.net.SocketFactory. Questa classe verrà utilizzata per creare socket SMTP. |
mail.smtp.socketFactory.fallback | booleano | Se impostato su true, la mancata creazione di un socket utilizzando la classe socket factory specificata causerà la creazione del socket utilizzando la classe java.net.Socket. Il valore predefinito è vero. |
mail.smtp.socketFactory.port | int | Specifica la porta a cui connettersi quando si utilizza la produzione socket specificata. Se non impostata, verrà utilizzata la porta predefinita. |
mail.smtp.ssl.enable | booleano | Se impostato su true, utilizza SSL per connetterti e utilizza la porta SSL per impostazione predefinita. Il valore predefinito è false per il protocollo "smtp" e true per il protocollo "smtps". |
mail.smtp.ssl.checkserveridentity | booleano | Se impostato su true, controlla l'identità del server come specificato da RFC 2595. Il valore predefinito è false. |
mail.smtp.ssl.trust | Corda | Se impostato e non è stato specificato un factory socket, abilita l'uso di MailSSLSocketFactory. Se impostato su "*", tutti gli host sono affidabili. Se impostato su un elenco di host separati da spazi bianchi, tali host sono considerati attendibili. In caso contrario, l'attendibilità dipende dal certificato presentato dal server. |
mail.smtp.ssl.socketFactory | Fabbrica socket SSL | Se impostata su una classe che estende la classe javax.net.ssl.SSLSocketFactory, questa classe verrà utilizzata per creare socket SSL SMTP. |
mail.smtp.ssl.socketFactory.class | Corda | Se impostato, specifica il nome di una classe che estende la classe javax.net.ssl.SSLSocketFactory. Questa classe verrà utilizzata per creare socket SSL SMTP. |
mail.smtp.ssl.socketFactory.port | int | Specifica la porta a cui connettersi quando si utilizza la produzione socket specificata. Se non impostata, verrà utilizzata la porta predefinita. |
mail.smtp.ssl.protocols | corda | Specifica i protocolli SSL che verranno abilitati per le connessioni SSL. Il valore della proprietà è un elenco separato da spazi di token accettabili per il metodo javax.net.ssl.SSLSocket.setEnabledProtocols. |
mail.smtp.starttls.enable | booleano | Se true, abilita l'uso del comando STARTTLS (se supportato dal server) per passare la connessione a una connessione protetta da TLS prima di emettere qualsiasi comando di accesso. Il valore predefinito è false. |
mail.smtp.starttls.required | booleano | Se vero, richiede l'uso del comando STARTTLS. Se il server non supporta il comando STARTTLS o il comando non riesce, il metodo di connessione fallirà. Il valore predefinito è false. |
mail.smtp.socks.host | corda | Specifica il nome host di un server proxy SOCKS5 che verrà utilizzato per le connessioni al server di posta. |
mail.smtp.socks.port | corda | Specifica il numero di porta per il server proxy SOCKS5. Dovrebbe essere utilizzato solo se il server proxy non utilizza il numero di porta standard 1080. |
mail.smtp.mailextension | Corda | Stringa di estensione da aggiungere al comando MAIL. |
mail.smtp.userset | booleano | Se impostato su true, utilizzare il comando RSET invece del comando NOOP nel metodo isConnected. In alcuni casi sendmail risponderà lentamente dopo molti comandi NOOP; l'uso di RSET evita questo problema di sendmail. Il valore predefinito è false. |
In generale, le applicazioni non dovrebbero aver bisogno di utilizzare direttamente le classi in questo pacchetto. Invece, dovrebbero utilizzare le API definite dal pacchetto javax.mail (e dai sottopacchetti). Supponiamo ad esempio che le applicazioni non dovrebbero mai costruire direttamente istanze di SMTPTransport. Invece, dovrebbero utilizzare il metodo getTransport Session per acquisire un oggetto Transport appropriato.
Esempi di utilizzo del server SMPT sono illustrati nel capitolo Invio di e-mail .