API JavaMail: risposta alle e-mail
In questo capitolo vedremo come rispondere a un'e-mail utilizzando JavaMail API. I passaggi di base seguiti nel programma seguente sono:
Ottieni l'oggetto Session con i dettagli del server POP e SMPT nelle proprietà. Avremmo bisogno dei dettagli POP per recuperare i messaggi e dei dettagli SMPT per inviare messaggi.
Crea un oggetto negozio POP3 e connettiti al negozio.
Crea un oggetto Cartella e apri la cartella appropriata nella tua casella di posta.
Recupera i messaggi.
Scorri i messaggi e digita "Y" o "y" se vuoi rispondere.
Ottieni tutte le informazioni (A, Da, Oggetto, Contenuto) del messaggio.
Crea il messaggio di risposta, utilizzando il metodo Message.reply (). Questo metodo configura un nuovo messaggio con il destinatario e l'oggetto corretti. Il metodo accetta un parametro booleano che indica se rispondere solo al mittente (falso) o rispondere a tutti (vero).
Impostare Da, Testo e Rispondi a nel messaggio e inviarlo tramite l'istanza dell'oggetto Trasporto.
Chiudere rispettivamente il trasporto, la cartella e gli oggetti di archivio.
Qui abbiamo utilizzato il server JangoSMPT tramite il quale le email vengono inviate al nostro indirizzo email di destinazione. La configurazione è spiegata nel capitolo Configurazione dell'ambiente .
Crea classe Java
Crea un file di classe java ReplyToEmail, i cui contenuti sono i seguenti:
package com.tutorialspoint;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class ReplyToEmail {
public static void main(String args[])
{
Date date = null;
Properties properties = new Properties();
properties.put("mail.store.protocol", "pop3");
properties.put("mail.pop3s.host", "pop.gmail.com");
properties.put("mail.pop3s.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", "relay.jangosmtp.net");
properties.put("mail.smtp.port", "25");
Session session = Session.getDefaultInstance(properties);
// session.setDebug(true);
try
{
// Get a Store object and connect to the current host
Store store = session.getStore("pop3s");
store.connect("pop.gmail.com", "[email protected]",
"*****");//change the user and password accordingly
Folder folder = store.getFolder("inbox");
if (!folder.exists()) {
System.out.println("inbox not found");
System.exit(0);
}
folder.open(Folder.READ_ONLY);
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
Message[] messages = folder.getMessages();
if (messages.length != 0) {
for (int i = 0, n = messages.length; i < n; i++) {
Message message = messages[i];
date = message.getSentDate();
// Get all the information from the message
String from = InternetAddress.toString(message.getFrom());
if (from != null) {
System.out.println("From: " + from);
}
String replyTo = InternetAddress.toString(message
.getReplyTo());
if (replyTo != null) {
System.out.println("Reply-to: " + replyTo);
}
String to = InternetAddress.toString(message
.getRecipients(Message.RecipientType.TO));
if (to != null) {
System.out.println("To: " + to);
}
String subject = message.getSubject();
if (subject != null) {
System.out.println("Subject: " + subject);
}
Date sent = message.getSentDate();
if (sent != null) {
System.out.println("Sent: " + sent);
}
System.out.print("Do you want to reply [y/n] : ");
String ans = reader.readLine();
if ("Y".equals(ans) || "y".equals(ans)) {
Message replyMessage = new MimeMessage(session);
replyMessage = (MimeMessage) message.reply(false);
replyMessage.setFrom(new InternetAddress(to));
replyMessage.setText("Thanks");
replyMessage.setReplyTo(message.getReplyTo());
// Send the message by authenticating the SMTP server
// Create a Transport instance and call the sendMessage
Transport t = session.getTransport("smtp");
try {
//connect to the smpt server using transport instance
//change the user and password accordingly
t.connect("abc", "****");
t.sendMessage(replyMessage,
replyMessage.getAllRecipients());
} finally {
t.close();
}
System.out.println("message replied successfully ....");
// close the store and folder objects
folder.close(false);
store.close();
} else if ("n".equals(ans)) {
break;
}
}//end of for loop
} else {
System.out.println("There is no msg....");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
È possibile attivare il debug rimuovendo il commento dall'istruzione session.setDebug (true);
Compila ed esegui
Ora che la nostra classe è pronta, compiliamo la classe precedente. Ho salvato la classe ReplyToEmail.java nella directory:/home/manisha/JavaMailAPIExercise. Avremmo bisogno dei jars javax.mail.jar e activation.jar nel classpath. Esegui il comando seguente per compilare la classe (entrambi i vasi sono posizionati nella directory / home / manisha /) dal prompt dei comandi:
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: ReplyToEmail.java
Ora che la classe è compilata, esegui il seguente comando per eseguire:
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: ReplyToEmail
Verifica output
Dovresti vedere il seguente messaggio sulla console di comando:
From: ABC <[email protected]>
Reply-to: [email protected]
To: XYZ <[email protected]>
Subject: Hi today is a nice day
Sent: Thu Oct 17 15:58:37 IST 2013
Do you want to reply [y/n] : y
message replied successfully ....
Controlla la posta in arrivo a cui è stata inviata la posta. Nel nostro caso il messaggio ricevuto appare come di seguito: