Accuse de recpetion ou notification de recpetion avec javamail

chhibiJAVA Messages postés 29 Date d'inscription lundi 21 novembre 2011 Statut Membre Dernière intervention 26 septembre 2012 - 15 févr. 2012 à 22:19
 solidleon - 21 juin 2018 à 10:29
bonjour a tous,

j'ai réussit d'envoyer un mail avec une pièce jointe avec api javamail et je cherche maintenant faire l'accuse de reception ou une notification de reception de mon mail et je sait pas comment faire ? merci de m'aider

voici mon code :



import java.util.Date;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class EmailAttachmentDemo {

private String from, to, bodyText, subject;
private String smtp, filename;
private int port;









public String getFilename() {
return filename;
}

public void setFilename(String filename) {
this.filename = filename;
}

public String getFrom() {
return from;
}

public String getBodyText() {
return bodyText;
}

public void setBodyText(String bodyText) {
this.bodyText = bodyText;
}

public int getPort() {
return port;
}

public String getSmtp() {
return smtp;
}

public String getSubject() {
return subject;
}

public String getTo() {
return to;
}

public void setFrom(String from) {
this.from = from;
}

public void setPort(int port) {
this.port = port;
}

public void setSmtp(String smtp) {
this.smtp = smtp;
}

public void setSubject(String subject) {
this.subject = subject;
}

public void setTo(String to) {
this.to = to;
}

public EmailAttachmentDemo(String from, String to, String bodyText, String subject, String filename) {
this.from = from;
this.to = to;
this.bodyText = bodyText;
this.subject = subject;
this.filename = filename;
this.smtp = "smtp.topnet.tn";
this.port = 25;
}

public boolean validmail(String email) {
Pattern p = Pattern.compile("^[a-zA-Z]+[.]+[a-zA-Z]+@[a-zA-Z.]{2,}[.][a-zA-Z]{2,4}$");
Matcher m = p.matcher(email);
if (m.matches() == true) {
return true;
} else {
System.out.println("email non valider");
return false;
}
}

public boolean sendEmail() {
if (!validmail(getFrom())) {
return false;
}
if (!validmail(getTo())) {
return false;
}

Properties properties = new Properties();
properties.put("mail.smtp.host", getSmtp());
properties.put("mail.smtp.port", getPort());

Session session = Session.getDefaultInstance(properties, null);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(getFrom()));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(getTo()));

message.setSubject(getSubject());
message.setSentDate(new Date());


MimeBodyPart messagePart = new MimeBodyPart();
messagePart.setText(getBodyText());

MimeBodyPart attachmentPart = new MimeBodyPart();

FileDataSource fileDataSource = new FileDataSource(getFilename()) {

@Override
public String getContentType() {
return "application/octet-stream";
}
};

attachmentPart.setDataHandler(new DataHandler(fileDataSource));
attachmentPart.setFileName(getFilename());
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messagePart);
multipart.addBodyPart(attachmentPart);
message.setContent(multipart);


Transport.send(message);

System.out.println("mail envoyée");
return true;
} catch (MessagingException e) {
System.out.println("mail non envoyée");
// e.printStackTrace();
return false;

}

}

public static void main(String[] args) {
String from = "Chhibi.Ahmed@yahoo.fr";
String des = "chhibi.ahmed@gmail.com";
String msg = "bonjour";
String subject = "mailattachment";
String filename = "test.xlsx";

EmailAttachmentDemo demo = new EmailAttachmentDemo(from, des, msg, subject, filename);
if (!demo.sendEmail()) {
System.out.println("email non envoyée");
}
}
}

10 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 372
16 févr. 2012 à 08:05
Bonjour,

Il faut ajouter une information dans le header :

message.setHeader("Disposition-Notification-To",adresseEmeteur);
message.setHeader("Return-Receipt-To",adresseEmeteur);


Ca ne fonctionnera pas avec tous les logiciels de messagerie
0
chhibiJAVA Messages postés 29 Date d'inscription lundi 21 novembre 2011 Statut Membre Dernière intervention 26 septembre 2012
16 févr. 2012 à 20:20
bonjour ,

merci pour ton réponse mais ça ne marche pas.j'ai ajouté le code qui tu as posté mais sans résultat
vraiment je suis bloqué !!!
Merci
0
chhibiJAVA Messages postés 29 Date d'inscription lundi 21 novembre 2011 Statut Membre Dernière intervention 26 septembre 2012
16 févr. 2012 à 20:37
bonjour,
voici le nouveau code aprés l'ajout de
message.setHeader("Disposition-Notification-To",adresseEmeteur);
message.setHeader("Return-Receipt-To",adresseEmeteur); mais rien a changer!!


import java.util.Date;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
//import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class EmailAttachmentDemo {

private String from, to, bodyText, subject;
private String smtp, filename;
private int port;









public String getFilename() {
return filename;
}

public void setFilename(String filename) {
this.filename = filename;
}

public String getFrom() {
return from;
}

public String getBodyText() {
return bodyText;
}

public void setBodyText(String bodyText) {
this.bodyText = bodyText;
}

public int getPort() {
return port;
}

public String getSmtp() {
return smtp;
}

public String getSubject() {
return subject;
}

public String getTo() {
return to;
}

public void setFrom(String from) {
this.from = from;
}

public void setPort(int port) {
this.port = port;
}

public void setSmtp(String smtp) {
this.smtp = smtp;
}

public void setSubject(String subject) {
this.subject = subject;
}

public void setTo(String to) {
this.to = to;
}

public EmailAttachmentDemo(String from, String to, String bodyText, String subject, String filename) {
this.from = from;
this.to = to;
this.bodyText = bodyText;
this.subject = subject;
this.filename = filename;
this.smtp = "smtp.topnet.tn";
this.port = 25;
}

public boolean validmail(String email) {
Pattern p = Pattern.compile("^[a-zA-Z]+[.]+[a-zA-Z]+@[a-zA-Z.]{2,}[.][a-zA-Z]{2,4}$");
Matcher m = p.matcher(email);
if (m.matches() == true) {
return true;
} else {
System.out.println("email non valider");
return false;
}
}

public boolean sendEmail() {
if (!validmail(getFrom())) {
return false;
}
if (!validmail(getTo())) {
return false;
}

Properties properties = new Properties();
properties.put("mail.smtp.host", getSmtp());
properties.put("mail.smtp.port", getPort());

Session session = Session.getDefaultInstance(properties, null);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(getFrom()));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(getTo()));


message.setSubject(getSubject());
message.setSentDate(new Date());

/*/Accus de reception*/
message.setHeader("Disposition-Notification-To", getFrom());
message.setHeader("Return-Receipt-To", getFrom());
/* */

MimeBodyPart messagePart = new MimeBodyPart();
messagePart.setText(getBodyText());

MimeBodyPart attachmentPart = new MimeBodyPart();

FileDataSource fileDataSource = new FileDataSource(getFilename()) {

@Override
public String getContentType() {
return "application/octet-stream";
}
};

attachmentPart.setDataHandler(new DataHandler(fileDataSource));
attachmentPart.setFileName(getFilename());
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messagePart);
multipart.addBodyPart(attachmentPart);
message.setContent(multipart);


Transport.send(message);

System.out.println("mail envoyée");
return true;
} catch (MessagingException e) {
System.out.println("mail non envoyée");
// e.printStackTrace();
return false;

}

}

/**
* Ajoute un header dans le message mail demandant un accusé de réception au(x) destinataire(s).
*
* @throws MessagingException Classe de base de toutes les exceptions levées par l'API.
*/

public static void main(String[] args) {
String from = "Chhibi.Ahmed@yahoo.fr";
String des = "chhibi.ahmed@gmail.com";
String msg = "bonjour";
String subject = "mailattachment";
String filename = "test.xlsx";

EmailAttachmentDemo demo = new EmailAttachmentDemo(from, des, msg, subject, filename);
if (!demo.sendEmail()) {
System.out.println("email non envoyée");
}
}
}
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 372
17 févr. 2012 à 08:12
Le mail est ouvert avec quel logiciel ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chhibiJAVA Messages postés 29 Date d'inscription lundi 21 novembre 2011 Statut Membre Dernière intervention 26 septembre 2012
17 févr. 2012 à 09:37
bonjour,
je utilise netbeans
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 372
17 févr. 2012 à 10:05
Oui, mais une fois que le mail est reçu, quel logiciel l'ouvre ? Quel est le client de messagerie ?
0
chhibiJAVA Messages postés 29 Date d'inscription lundi 21 novembre 2011 Statut Membre Dernière intervention 26 septembre 2012
17 févr. 2012 à 11:52
Conformément au code ci dessus, j'utilise à la réception mon compte Gmail.
0
chhibiJAVA Messages postés 29 Date d'inscription lundi 21 novembre 2011 Statut Membre Dernière intervention 26 septembre 2012
17 févr. 2012 à 12:00
Je vérifie sur @ et je précise que Gmail est mon WebMail.
0
chhibiJAVA Messages postés 29 Date d'inscription lundi 21 novembre 2011 Statut Membre Dernière intervention 26 septembre 2012
17 févr. 2012 à 12:06
Je me permets de vs demander s'il y aurait une relation entre le clt de messagerie et la notif de réception. Je veux dire, est ce qu'il y aurait une config bien déterminée sous OutLook par exple étant un clt de messagerie pour envoyer les notifs de réception???
0
A ma connaissance, certain serveur SMTP comme GMAIL n'autorise pas d'envoyé d'accusée de reception cointrairement a Outlook par exemple
Il faudra que l'ensemble des relais SMTP utilisent le service DSN delivery status notification pour que cela fonctionne.
0
Rejoignez-nous