(Неизвестный отправитель) при отправке электронной почты с вложением PDF, созданным в iText из Java-приложения - PullRequest
1 голос
/ 07 декабря 2011

У меня есть ссылка на веб-странице, которая отправляет электронные письма с локального SMTP-сервера с вложениями в формате pdf, созданными из iText, которые я сделал следующим образом Как создать отчет в формате PDF в памяти и отправить его как вложение электронной почты с использованием iText и Java и он работает, однако, когда я получаю электронные письма, я не вижу имя / адрес отправителя.

В моем почтовом ящике Gmail отображается «от (неизвестного отправителя)», и, если я нажму «Ответить», поле «Кому» будет полностью пустым. В hotmail отображается как «Неизвестно», но когда я его открываю, отправитель отображается как «admin@whwhat.com от имени (Неизвестно)»

Когда я тестирую SMTP на сервере через telnet, имя отправителя, которое я создаю, проходит просто замечательно. Как я могу заставить его отображаться, когда приложение отправляет электронное письмо?

Вот код, который отправляет электронное письмо:

    String smtpHost = "localhost";
    int smtpPort = 25;
    String sender = "admin@whatever.com";
    String[] recipient = pdfEmail.replaceAll("\\ ", "").split(",");
    String content = "whatever"; 
    String subject = "whatever"; 

    Properties props = new Properties();
    props.put("mail.smtp.host", smtpHost);
    props.put("mail.smtp.user", sender);
    props.put("mail.smtp.port", smtpPort);

    Session session = Session.getDefaultInstance(props, null);

    ByteArrayOutputStream outputStream = null;

    try {          
        //construct the text body part
        MimeBodyPart textBodyPart = new MimeBodyPart();
        textBodyPart.setText(content);

        //now write the PDF content to the output stream
        outputStream = new ByteArrayOutputStream();
        writePdf(outputStream); //creates PDF
        byte[] bytes = outputStream.toByteArray();

        //construct the pdf body part
        DataSource dataSource = new ByteArrayDataSource(bytes, "application/pdf");
        MimeBodyPart pdfBodyPart = new MimeBodyPart();
        pdfBodyPart.setDataHandler(new DataHandler(dataSource));
        pdfBodyPart.setFileName("test.pdf");

        //construct the mime multi part
        MimeMultipart mimeMultipart = new MimeMultipart();
        mimeMultipart.addBodyPart(textBodyPart);
        mimeMultipart.addBodyPart(pdfBodyPart);

        //create the sender/recipient addresses
        InternetAddress iaSender = new InternetAddress(sender);     
        InternetAddress[] toAddress = new InternetAddress[recipient.length];

        // To get the array of addresses
        for( int i=0; i < recipient.length; i++ ) { 
            toAddress[i] = new InternetAddress(recipient[i]);
        }

        //construct the mime message
        MimeMessage mimeMessage = new MimeMessage(session);

        for( int i=0; i < toAddress.length; i++) { 
            mimeMessage.addRecipient(Message.RecipientType.TO, toAddress[i]);
        }

        mimeMessage.setSender(iaSender);
        mimeMessage.setSubject(subject);
        mimeMessage.setRecipients(Message.RecipientType.TO, toAddress);
        mimeMessage.setContent(mimeMultipart);

        //send off the email         
        Transport.send(mimeMessage);

    } catch(Exception ex) {
        ex.printStackTrace();
    } finally {
        //clean off
        if(null != outputStream) {
            try { outputStream.close(); outputStream = null; }
            catch(Exception ex) { }
        }

    }
}

1 Ответ

3 голосов
/ 07 декабря 2011

Попробуйте использовать mimeMessage.setFrom(...) вместо mimeMessage.setSender(...).

...