Java 如何在春季发送带有附件的邮件

Java 如何在春季发送带有附件的邮件,java,Java,当您尝试使用zip mime发送邮件时,会收到一些随机格式的附件。因此,试图通过硬编码更改mime类型,需要知道如何从bytearraysource对象获取mime类型 package com.mail.send; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.

当您尝试使用zip mime发送邮件时,会收到一些随机格式的附件。因此,试图通过硬编码更改mime类型,需要知道如何从bytearraysource对象获取mime类型

package com.mail.send;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MailImpl {
public static void main(String args[]) throws IOException{

    ApplicationContext context=new ClassPathXmlApplicationContext("Spring.xml");
    JavaMail javaMail=(JavaMail) context.getBean("JavaMail");
    System.out.println("after bean creation");
    String to="abc@gmail.com";
    String cc="xyz@gmail.com";
    String subject="Pdf notification";
    String content="PDF has been generated";
    boolean flag = true ;
    File file =new File("E:\\Sample.pdf");

    //byte [] sample=null;

    /*start of modify*/
     FileInputStream fin = null;
     byte fileContent[] = new byte[(int)file.length()];
    try {
        // create FileInputStream object
        fin = new FileInputStream(file);



        // Reads up to certain bytes of data from this input stream into an array of bytes.
        fin.read(fileContent);
        //create string from byte array
        String s = new String(fileContent);
        System.out.println("File content: " + s);
    }
    catch (FileNotFoundException e) {
        System.out.println("File not found" + e);
    }
    catch (IOException ioe) {
        System.out.println("Exception while reading file " + ioe);
    }
    finally {
        // close the streams using close method
        try {
            if (fin != null) {
                fin.close();
            }
        }
        catch (IOException ioe) {
            System.out.println("Error while closing stream: " + ioe);
        }
    }
    byte[] fileContent1 = null;

    /*end of modify */
    if(flag==true){
        fileContent1=zipBytes("Sample.pdf", fileContent);//document.getmimetype
    }else{
        fileContent1 = fileContent;
    }
    javaMail.sendEmail(to, cc, subject, content, fileContent1);


}

public static byte[] zipBytes(String filename, byte[] input) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ZipOutputStream zos = new ZipOutputStream(baos);
    ZipEntry entry = new ZipEntry(filename);
    entry.setSize(input.length);
    zos.putNextEntry(entry);
    zos.write(input);
    zos.closeEntry();
    zos.close();



    return baos.toByteArray();
}


}
包裹com.mail.send

import java.io.File;
import javax.mail.internet.MimeMessage;
import javax.mail.util.ByteArrayDataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
//梅林普尔 公共类JavaMail{

@Autowired
JavaMailSender mailSender;

public JavaMailSender getMailSender() {
    return mailSender;
}

public void setMailSender(JavaMailSender mailSender) {
    this.mailSender = mailSender;
}

String from = "pqr@gmail.com";

public void sendEmail(String to, String cc, String subject, String content,
        byte [] attachement) {
    try {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
        mimeMessageHelper.setFrom(from);
        mimeMessageHelper.setTo(to);
        mimeMessageHelper.setCc(cc);
        mimeMessageHelper.setSubject(subject);
        mimeMessageHelper.setText(content, true);
    //  mimeMessageHelper.addAttachment(attachement.getName(), attachement);

        //ByteArrayDataSource byteArrayDataSource=new ByteArrayDataSource(attachement, "application/zip");
        ByteArrayDataSource byteArrayDataSource = null;
        if(attachement.length > 10){
             byteArrayDataSource=new ByteArrayDataSource(attachement, "application/zip");
             mimeMessageHelper.addAttachment(byteArrayDataSource.getName(), byteArrayDataSource);

            }else{
                 byteArrayDataSource=new ByteArrayDataSource(attachement, "application/pdf");
                 mimeMessageHelper.addAttachment(byteArrayDataSource.getName()+".pdf", byteArrayDataSource);

            }
        //mimeMessageHelper.addAttachment(byteArrayDataSource.getName(), byteArrayDataSource);

        System.out.println("Start of mail");
        mailSender.send(mimeMessage);
        System.out.println("End of mail");

    } catch (Exception e) {
        System.out.println(e);
    }
}

}


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:component-scan base-package="com.mail.send" />

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="localhost" />
    <property name="port" value="25" />
    <property name="javaMailProperties">
        <props>
            <prop key="mail.transport.protocol">smtp</prop>
            <prop key="mail.smtp.auth">false</prop>
            <prop key="mail.smtp.starttls.enable">true</prop>
        </props>
    </property>
</bean>

<bean id="JavaMail" class="com.mail.send.JavaMail">
    <property name="mailSender" ref="mailSender" />
</bean>

<!--    <bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    max upload size in bytes
    <property name="maxUploadSize" value="20971520" /> 20MB

    max size of file in memory (in bytes)
    <property name="maxInMemorySize" value="1048576" /> 1MB

</bean> -->
</beans>
@Autowired
JavaMailSender;
公共JavaMailSender getMailSender(){
返回邮件发送者;
}
public void setMailSender(JavaMailSender-mailSender){
this.mailssender=mailssender;
}
字符串from=”pqr@gmail.com";
public void sendmail(字符串收件人、字符串抄送、字符串主题、字符串内容、,
字节[]附件){
试一试{
MimeMessage MimeMessage=mailssender.createMimeMessage();
MimeMessageHelper MimeMessageHelper=新的MimeMessageHelper(mimeMessage,true);
mimessagehelper.setFrom(from);
mimessagehelper.setTo(to);
mimessagehelper.setCc(cc);
mimessagehelper.setSubject(subject);
mimessagehelper.setText(content,true);
//mimessagehelper.addAttachment(attachement.getName(),attachement);
//ByteArrayDataSource ByteArrayDataSource=新的ByteArrayDataSource(附件,“应用程序/zip”);
ByteArrayDataSource ByteArrayDataSource=null;
如果(附件长度>10){
byteArrayDataSource=新的byteArrayDataSource(附件,“应用程序/zip”);
mimeMessageHelper.addAttachment(byteArrayDataSource.getName(),byteArrayDataSource);
}否则{
byteArrayDataSource=新的byteArrayDataSource(附件,“应用程序/pdf”);
mimeMessageHelper.addAttachment(byteArrayDataSource.getName()+“.pdf”,byteArrayDataSource);
}
//mimeMessageHelper.addAttachment(byteArrayDataSource.getName(),byteArrayDataSource);
System.out.println(“邮件开始”);
mailssender.send(mimeMessage);
System.out.println(“邮件结束”);
}捕获(例外e){
系统输出打印ln(e);
}
}
}
smtp
假的
真的

谢谢,它很好用。我所做的唯一更改是“byteArrayDataSource.getName()”而不是这个,我给出了我的文件名,因为它返回的是空字符串。