1

HTTP経由でExcelスプレッドシートを取得し、それをJavaSpringサーバー上の電子メールの添付ファイルとして送信する必要があります。

私が見つけた問題は、MultiPartEmail.attach()がjava.net.URLインスタンスのみを取得し、リクエストのヘッダーに認証用の特定のCookieが含まれていることを確認する方法がわからないことです。

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

手動でワークブックを要求して作成しようとしましたが、ワークブック自体を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");

これらの制限を回避する方法が必要です。

よろしくお願いします。

4

1 に答える 1

1

Springを使用しているため、組み込みの電子メールサポートを使用して電子メールを送信できます。したがって、ディスクやその他の場所からファイルをどのように取得するかは問題ではありません。MimeMessageHelperを使用して添付ファイル付きの電子メールを送信し、次のように認証用のメールホストのアカウントのユーザー名とパスワードを指定できます。

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();
    }           
}
}

Bean構成ファイルでJavaMailSenderImplBeanを構成します。これは、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>

これはテスト用です。

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ドキュメント

于 2012-08-01T05:05:11.140 に答える