来自需要cookie的URL的Apache MultiPartEmail

我需要通过HTTP获取Excel电子表格,然后将其作为附件发送到我的Java Spring服务器上的电子邮件。

我发现的问题是,MultiPartEmail.attach()只需要一个java.net.URL实例,我不知道如何确保请求具有一个确定的Cookie在其标头authentication。

url = new URL(urlString); email.attach(url, "test.xls", "File"); email.send(); 

我试图手动请求和创build一个工作簿,但是我很难将工作簿本身附加到MultiPartEmail上。

 HttpClient client = new HttpClient(); GetMethod method = new GetMethod(queryString); method.setRequestHeader("Cookie", cookie); client.executeMethod(method); InputStream stream = method.getResponseBodyAsStream(); Workbook workbook = Workbook.getWorkbook(stream); email.attach(workbook, "report.xls", "forecasting report"); 

我需要一些方法来解决这些限制。

在此先感谢您的时间。

由于您使用的是Spring,因此您可以使用其内置的电子邮件支持来发送电子邮件。 所以,如何从磁盘或其他地方检索文件并不重要。 您可以使用MimeMessageHelper发送带有附件的电子邮件,并在邮件主机处指定帐户的用户名和密码进行validation,如下所示:

 public class EmailNotifier { private JavaMailSenderImpl mailSender; public void setMailSender(JavaMailSenderImpl mailSender) { this.mailSender = mailSender; } public void sendMail(InternetAddress fromAddress, InternetAddress toAddress, String subject, String msg) { MimeMessage message = mailSender.createMimeMessage(); try { // use the true flag to indicate you need a multipart message MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(fromAddress); helper.setTo(toAddress); helper.setSubject(subject); helper.setText(msg); // let's attach the infamous windows Sample file (this time copied to c:/) FileSystemResource file = new FileSystemResource(new File("c:/test.xls")); helper.addAttachment("test.xls", file); mailSender.send(message); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

并在你的beanconfiguration文件中configuration一个JavaMailSenderImpl bean。 这是通过Gmail发送电子邮件。

beans.xml中

 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="smtp.gmail.com" /> <property name="port" value="587" /> <property name="username" value="adminxxxx" /> <property name="password" value="password" /> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">true</prop> <prop key="mail.smtp.starttls.enable">true</prop> </props> </property> </bean> <bean id="emailNotifier" class="com.examples.EmailNotifier"> <property name="mailSender" ref="mailSender" /> </bean> </beans> 

这只是为了testing:

 public class MailApp { public static void main( String[] args ) { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); EmailNotifier emailNotifier = (EmailNotifier) context.getBean("emailNotifier"); try { emailNotifier.sendMail(new InternetAddress("adminxxxx@gmail.com"), new InternetAddress("recipientxxxx@gmail.com"), "Email Alert!", "Hello User, This is a test email \n No response required."); } catch (AddressException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

Spring文档