web-dev-qa-db-fra.com

Java l'adresse de l'expéditeur du courrier affiché plutôt que son nom

J'essaie d'envoyer du courrier à mes amis via mon Java application de messagerie. Je suis en mesure de le faire avec succès, mais la colonne du destinataire dans la boîte aux lettres affiche l'adresse e-mail complète plutôt que le nom de l'expéditeur J'ai essayé de modifier divers paramètres mais la boîte aux lettres affiche toujours l'adresse e-mail complète plutôt que le nom de l'expéditeur.

en utilisant cette méthode pour envoyer le message:

 public void send(String key){
    String to=key;
    String from="mygmailid";
    String subject="wassp";
    String text="Hello";
    Properties props=new Properties();

    props.put("mail.smtp.Host", "smtp.gmail.com");
    props.put("mail.smtp.user", "myname");
    props.put("mail.smtp.socketFactory.port", "465");
    props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "465");
    Session mailSession=Session.getDefaultInstance(props);
    Message simpleMessage=new MimeMessage(mailSession);

    InternetAddress fromAddress=null;
    InternetAddress toAddress=null;

    try{
        fromAddress=new InternetAddress(from);
        toAddress=new InternetAddress(to);
    }
    catch(AddressException e){
        e.printStackTrace();
    }

    try{
        simpleMessage.setFrom(fromAddress);
        simpleMessage.setRecipient(RecipientType.TO,toAddress);
        simpleMessage.setSubject(subject);
        simpleMessage.setText(text);

        transport.connect("smtp.gmail.com",465, "[email protected]", "mygmailpassword");
        transport.sendMessage(simpleMessage, simpleMessage.getAllRecipients());
        transport.close();  

    }
    catch(MessagingException e){
        e.printStackTrace();
    }
}

J'appelle cette méthode comme:

public static void main(String[] args) {
    MailSender mailer=new MailSender();
    mailer.send("[email protected]");
}
34
Nelo Angelo

Vous pouvez définir un nom dans InternetAddress en utilisant

new InternetAddress("[email protected]", "Your Name");
90
Raghav

Vous devez utiliser le constructeur à deux chaînes d'InternetAddress pour transmettre à la fois l'adresse e-mail et le nom de la personne. L'e-mail résultant contiendra une chaîne comme Jarrod l'a indiqué.

InternetAddress fromAddress=new InternetAddress("[email protected]", "John Doe");
21
Sarel Botha
    try {

        String from = " EMAIL ID";
        String SMTP_AUTH_PWD = " PASSWORD ";
        Properties props = new Properties();
        props.put("mail.smtp.Host", "smtp.gmail.com");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.transport.protocol", "smtps");
        props.put("mail.smtps.auth", "true");
        String SMTP_Host_NAME = "smtp.gmail.com";
        int SMTP_Host_PORT = 465;
        javax.mail.Session mailSession = Session.getDefaultInstance(props);

        mailSession.setDebug(true);
        Transport transport = ((javax.mail.Session) mailSession)
                .getTransport();

        javax.mail.Message message = new MimeMessage(mailSession);
        message.setSubject("Testing SMTP-SSL");
        message.setContent("", "text/plain");
        message.addRecipient(javax.mail.Message.RecipientType.TO,
                new InternetAddress(receiver));
        transport.connect(SMTP_Host_NAME, SMTP_Host_PORT, from,
                SMTP_AUTH_PWD);
        message.setFrom(new InternetAddress(from," YOUR PREFERED NAME "));
        message.setSubject(subject);
        BodyPart messageBodyPart = new MimeBodyPart();
        messageBodyPart.setText(body);
        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(messageBodyPart);
        messageBodyPart = new MimeBodyPart();
        message.setContent(multipart);

        transport.sendMessage(message,
                message.getRecipients(javax.mail.Message.RecipientType.TO));

    }
4
John Davis

La façon dont le champ from est affiché est un détail d'implémentation spécifique au client.

Généralement, si l'expéditeur se présente sous la forme de "Sender Name" <[email protected]> le client fera la bonne chose en fonction de la configuration.

Certains clients déduiront les informations de nom à partir des informations de leur carnet d'adresses si elles sont manquantes.

4
user177800

Les réponses ci-dessus sont correctes mais j'ai trouvé que je devais placer un essai pour que cela fonctionne, voici ce que j'ai trouvé travaillé à partir de l'application de démonstration sendemailwebapp.

Message msg = nouveau MimeMessage (session);

    try {
        msg.setFrom(new InternetAddress(userName, "YourName"));
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    InternetAddress[] toAddresses = { new InternetAddress(toAddress) };
    msg.setRecipients(Message.RecipientType.TO, toAddresses);
    msg.setSubject(subject);
    msg.setSentDate(new Date());
    msg.setText(message);
3
Dave

Essayez ce code dans le bloc try. Vous pouvez initialiser votre nom dans la méthode setFrom () de MimeMessage.

simpleMessage.setFrom(new InternetAddress("Your mail id", "Your name"));

c'est à dire,

 try{
    simpleMessage.setFrom(new InternetAddress("Your mail id", "Your name"));
    simpleMessage.setRecipient(RecipientType.TO,toAddress);
    simpleMessage.setSubject(subject);
    simpleMessage.setText(text);

    transport.connect("smtp.gmail.com",465, "[email protected]", "mygmailpassword");
    transport.sendMessage(simpleMessage, simpleMessage.getAllRecipients());
    transport.close();  

 }
0
Gayathri Rajan