Bonjour,

Voila mon problème, j'ai une classe Mail très simple avec une méthode pour envoyer un mail (envoiMail) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import java.util.Properties;
 
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
 
public class Mail {
    public static void envoiMail(String from, String to, String cc, String sujet, String texte, PieceJointe pj, String signature) {
        // Création de l'objet Properties qui contient tous les paramètres d'initialisation nécessaires.
        Properties props = new Properties();
        props.put("mail.smtp.host", "chrmt-smtp01");
        Session session = Session.getInstance(props, null);
 
        try {
            // Création de l'objet message
            MimeMessage msg = new MimeMessage(session);
            msg.setSubject(sujet);                           // Ajout du sujet
            msg.setFrom(from);                               // Ajout du from ==> Erreur
            msg.setRecipients(Message.RecipientType.TO, to); // Ajout du destinataire
            msg.setRecipients(Message.RecipientType.CC, cc); // Ajout du destinataire en copie
 
            // Ajout du contenu au message
            msg.setContent(createMultipart(texte, pj, signature));
 
            Transport.send(msg);
        } catch (MessagingException mex) {
            System.out.println("send failed, exception: " + mex);
        }
    }
 
    public static MimeMultipart createMultipart(String texte, PieceJointe pj, String signature) throws MessagingException {
        MimeMultipart mp = new MimeMultipart();
 
        // 1ere partie du message : Le texte
        MimeBodyPart mbp1 = new MimeBodyPart();
        mbp1.setText(texte, "ISO-8859-1", "html");
        mp.addBodyPart(mbp1);
 
        // 2ème partie du message : La pièce jointe
        if(pj != null) {
            MimeBodyPart mbp2 = new MimeBodyPart();
            DataSource source = new FileDataSource(pj.getFile());
            mbp2.setDataHandler(new DataHandler(source));
            mbp2.setFileName(pj.getName());
            mp.addBodyPart(mbp2);
        }
 
        // 3ème partie du message : La signature
        MimeBodyPart mbp3 = new MimeBodyPart();
        mbp3.setText(signature, "ISO-8859-1", "html");
        mp.addBodyPart(mbp3);
 
        return mp;
    }
}
lorsque je test cette méthode directement dans eclipse, à partir d'une fonction main, cela fonctionne parfaitement :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.io.File;
import java.io.IOException;
 
import package_mail.Mail;
 
import com.google.common.base.Charsets;
 
public class testMainClass {    
    public static void main(String[] args) throws IOException {
        String signature = com.google.common.io.Files.toString(new File("code-signature.html"), Charsets.UTF_8);
 
        String texte = "texte de test test";
        String sujet = "ALERTE";
        String to    = "ppp@ppp.fr";
        String cc    = "ppp@ppp.fr";
 
        Mail.envoiMail("aaa@aaa.fr", to, cc, sujet, texte, null, signature);
    }
}
maintenant, à partir d'un logiciel, je lui demande d'appeler cette méthode et j'obtiens cette erreur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
java.lang.NoSuchMethodError: javax.mail.internet.MimeMessage.setFrom(Ljava/lang/String;)
l'erreur est donc sur la ligne :


maintenant, si je supprime cette ligne, le mail est bien envoyé mais avec du code html pour la signature :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
mbp3.setText(signature, "ISO-8859-1", "html");

Si quelqu'un à une explication ou une idée pour m'aider.
Merci.