Письмо, отправленное с использованием почты javax, доставляется с пустой темой и в поля - PullRequest
0 голосов
/ 17 апреля 2020

Я отправляю электронные письма из своего приложения, используя приведенный ниже код:

MimeMessage message = new MimeMessage(session);
String encodingOptions = "text/html; charset=UTF-8";
message.setHeader("Content-Type", encodingOptions);
message.setFrom(new InternetAddress(fromEmailAddress));
String[] toAddressArr = emailMsg.getTo().split(CommonConstants.SEMI_COLON);

for (String srtAddress : toAddressArr) {
    InternetAddress ia = new InternetAddress(srtAddress);
    addressToList.add(ia);
}

InternetAddress[] addressTo = new InternetAddress[addressToList.size()];
message.setRecipients(MimeMessage.RecipientType.TO, addressToList.toArray(addressTo));

if (!Util.isNullOrBlank(emailMsg.getCc())) {
    String[] copyAddressArr = emailMsg.getCc().split(CommonConstants.SEMI_COLON);
    ArrayList<InternetAddress> addressCopyList = new ArrayList<>();
    for (String srtAddress : copyAddressArr) {
    InternetAddress ia = new InternetAddress(srtAddress);
    addressCopyList.add(ia);
}

InternetAddress[] addressCopy = new InternetAddress[addressCopyList.size()];
message.setRecipients(MimeMessage.RecipientType.CC, addressCopyList.toArray(addressCopy));
}

if (!Util.isNullOrBlank(emailMsg.getBcc())) {
    String[] bccAddressArr = emailMsg.getBcc().split(CommonConstants.SEMI_COLON);
    ArrayList<InternetAddress> addressBccList = new ArrayList<>();
    for (String srtAddress : bccAddressArr) {
        InternetAddress ia = new InternetAddress(srtAddress);
        addressBccList.add(ia);
    }

    InternetAddress[] addressBcc = new InternetAddress[addressBccList.size()];
    message.setRecipients(MimeMessage.RecipientType.BCC, addressBccList.toArray(addressBcc));
}

    message.setSubject(emailMsg.getSubject(), "UTF-8");
    MimeBodyPart messageBodyPart = new MimeBodyPart();
    messageBodyPart.setText(emailMsg.getMessage());
    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageBodyPart);
    }
}

С помощью приведенных выше кодов я получаю письмо, доставленное по адресам электронной почты получателя, однако поле темы пустое, поле также пустое, а все получатели отображаются в поле b cc электронного письма. Кроме того, вложение приходит в виде байтовой строки вместо загружаемого файла PDF. Вот пример того, что входит:

user@gmail.com до b cc: user@outlook.com, b cc: user@domain.com

----- - = _ Part_0_455461077.1587067667930 Тип содержимого: текст / обычный текст; charset = us-ascii Content-Transfer-Encoding: 7bit

Уважаемый господин,

СОСТОЯНИЕ ОТЧЕТА




Для дальнейших запросов, пожалуйста, свяжитесь с нами наш отдел обслуживания клиентов по любому из следующих номеров: 01-255xxxx и 01-270xxxx.

С уважением. Для XYZ Corp. ------ = _ Part_0_455461077.1587067667930 Content-Type: text / plain; name = 37855.pdf Content-Transfer-Encoding: base64 Content-Disposition: вложение; Имя файла = 37855.pdf * * * тысяча двадцать-три 1024 * JVBERi0xLjMKJcTl8uXrp / Og0MTGCjQgMCBvYmoKPDwgL0xlbmd0aCA1IDAgUiAvRmlsdGVyIC9G bGF0ZURlY29kZSA + PgpzdHJlYW0KeAHNXW1v5EZy / s5fQY9mdmbXEocvwzet5PPKu7eO42ziWInv EOWTkcshsANc / Р + BPNX1VL + QlMTROkBgYKludldX13tXF8d / у3 / I / 5b3dT7mp27M6z7 / п // If8r / Oz9 + 81uV // xbXrr / fvsZo8qiPmlb / qiGvB2aYqzzn3 / N7 + 6zq7IoS / Tf / wxIbhge1Vi1RdlV + VXd 1F1 + / 2t + vL + v8yq // 0v + b / nhi83r / KrKDxf62Opj9zr79 / z + u / zDvUPuyWWjteqyORVD06dr * * 10 * * 10 * * * * * * * * html форматирование, однако, я не могу выполнить эту задачу, так как меня сдерживает этот ограничитель показа. Буду признателен за любую помощь.

РЕДАКТИРОВАТЬ

Я прилагаю файл PDF для отправки в виде вложения электронной почты с кодом ниже:

if (attachments != null) {  
        for (EmailAttachmentData attachment : attachments) {
            MimeBodyPart attachPart = new MimeBodyPart();
            DataSource source = new ByteArrayDataSource(attachment.getData(),      
            attachment.getFileType());
            attachPart.setDataHandler(new DataHandler(source));
            attachPart.setFileName(attachment.getFileName());
            multipart.addBodyPart(attachPart);
        }
    }

    message.setContent(multipart);
    message.setSentDate(new Date());

    try {
        Transport transport = session.getTransport(mailProtocol);
        transport.connect(mailHost, Integer.parseInt(mailPort), userName, password);
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    } catch (Exception ex) {
        ex.printStackTrace();
    }

Вот мое определение зависимостей maven для javax mail

    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>javax.mail-api</artifactId>
        <version>1.6.2</version>
    </dependency>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
        <scope>provided</scope>
    </dependency>

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Я наконец-то решил свою проблему, исключив geronimo-javamail_1.4_spe c и geronimo-активации_1.1_spe c из некоторых моих зависимостей maven. У меня также было несколько зависимостей javax.mail-api и javax.mail, поэтому удаление дубликатов спасло день. Теперь все работает хорошо. Темы и поля заполняются хорошо, а вложения также отправляются правильно. Для ясности я публикую исключения, которые я сделал ниже:

    <dependency>
        <groupId>org.apache.ws.commons.axiom</groupId>
        <artifactId>axiom-impl</artifactId>
        <version>1.2.8</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.geronimo.specs</groupId>
                <artifactId>geronimo-activation_1.1_spec</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.apache.geronimo.specs</groupId>
                <artifactId>geronimo-javamail_1.4_spec</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.apache.ws.commons.axiom</groupId>
        <artifactId>axiom-api</artifactId>
        <version>1.2.8</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.geronimo.specs</groupId>
                <artifactId>geronimo-activation_1.1_spec</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.apache.geronimo.specs</groupId>
                <artifactId>geronimo-javamail_1.4_spec</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.apache.ws.commons.axiom</groupId>
        <artifactId>axiom-dom</artifactId>
        <version>1.2.8</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.geronimo.specs</groupId>
                <artifactId>geronimo-activation_1.1_spec</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.apache.geronimo.specs</groupId>
                <artifactId>geronimo-javamail_1.4_spec</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
0 голосов
/ 17 апреля 2020

Какую версию JavaMail вы используете?

Код получателя выглядит хорошо, хотя и более многословно, чем необходимо. Но ваш код содержимого неверен.

Сообщение с вложением - это сообщение с многокомпонентным содержимым, в котором одна часть тела содержит основное содержание сообщения, а другая часть тела содержит вложение.

Ваш код о не показывает, как вы на самом деле отправляете сообщение. Вы просто звоните на Transport.send?

...