English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spring Java Mail

Springフレームワークは、メールの送信と受信に使用する多くの有用なインターフェースとクラスを提供します。

org.springframework.mail パッケージはSpringフレームワーク内でメールサポートを提供する根本的なパッケージです。

Spring Java Mail API

SpringフレームワークでJavaメールをサポートするインターフェースとクラスは以下の通りです:

MailSenderインターフェース: より根本的なインターフェースです。簡単なメールの送信の基本機能を提供します。 JavaMailSenderインターフェース: MailSenderのサブインターフェースです。MIMEメッセージをサポートします。主に MimeMessageHelper クラスと一緒に使用して、JavaMailの MimeMessage 、および添付ファイルなど。Springフレームワークはこの使用を推奨します。 MimeMessagePreparator このインターフェースを使用するためのメカニズム JavaMailSenderImplクラス: このインターフェースの実装を提供します。JavaMail MimeMessagesおよびSpring SimpleMailMessagesをサポートします。 SimpleMailMessageクラス: 簡単なメールを作成するために使用されます。送信元、宛先、カラベル、件名、テキストメールが含まれます。 MimeMessagePreparatorインターフェース: これはJavaMail MIMEメッセージを準備するためのコールバックインターフェースです。 MimeMessageHelperクラス: これはMIMEメッセージを作成するためのヘルパークラスです。画像、典型的なメールの添付ファイル、HTMLテキスト内容などのインライン要素をサポートしています。

SpringでGmailサーバーを通じてメールを送信する例

以下のSpringメールクラスを使用して:

SimpleMailMessage メッセージを作成するために使用されます。 JavaMailSenderImpl メッセージを送信するために使用されます。

Springフレームワークを使用してメールを送信するために、以下のファイルを作成する必要があります。

MailMail.java applicationContext.xml Test.java このサンプルを実行するには、mail.jarとactivation.jarファイルをロードする必要があります。

mail.jarとActivation.jarをダウンロードするか、Oracleのウェブサイトで最新バージョンをダウンロードしてください。


1)MailMail.java

これはmailSender属性を定義するシンプルなクラスです。実行時にその属性にMailSenderオブジェクトを提供します。

sendMail()メソッドでは、SimpleMailMessageのインスタンスを作成し、情報(例えば、送信元、宛先、件名、メッセージ)をそのオブジェクトに保存しています。

ここでは、MailSenderインターフェースのsend()メソッドを使用して簡単なメールを送信します。

package com.w3codebox;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
 
public class MailMail{
  private MailSender mailSender;
 
  public void setMailSender(MailSender mailSender) {
    this.mailSender = mailSender;
  }
 
  public void sendMail(String from, String to, String subject, String msg) {
        //creating message
    SimpleMailMessage message = new SimpleMailMessage();
    message.setFrom(from);
    message.setTo(to);
    message.setSubject(subject);
    message.setText(msg);
        //sending message
    mailSender.send(message); 
  }
}

2)applicationContext.xml

このxmlファイルで、JavaMailSenderImplクラスにbeanを作成します。以下の属性の値を定義する必要があります:

ホスト ユーザー名 パスワード javaMailProperties

MailMailクラスにbeanを作成するためにmailSender属性を使用します。今や、MailMailクラスのmailSender属性にJavaMailSenderImplクラスのインスタンスを設定します。

<?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:p="http://www.springframework.org/schema/p
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="host" value="smtp.gmail.com"}} />
  <property name="username" value="[email protected]" />
  <property name="password" value="yourgmailpassword" />
  </property>
     </props>
              <prop key="mail.smtp.auth">true</prop>/prop>
              <prop key="mail.smtp.socketFactory.port">465</prop>
              <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
              <prop key="mail.smtp.port">465</prop>
        </props>
  </property>
</bean>
<bean id="mailMail" class="com.w3codebox.MailMail">
  <property name="mailSender" ref="mailSender" />
</bean>
</beans>

3)Test.java

このクラスはapplicationContext.xmlファイルからmailMailのbeanを取得し、MailMailクラスのsendMailメソッドを呼び出します。

package com.w3codebox;
import org.springframework.beans.factory.*;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.*;
public class Test { 
public static void main(String[] args) {
  
Resource r = new ClassPathResource("applicationContext.xml");
BeanFactory b = new XmlBeanFactory(r);
MailMail m = (MailMail)b.getBean("mailMail");
String sender="[email protected]";//ここに送信者Gmail IDを記入してください
String receiver="[email protected]";//ここに受信者IDを記入してください
m.sendMail(sender,receiver,"hi","welcome");
  
System.out.println("success");
}
}

この例をどうやって実行するか

coreとJavaメール用にspring jarファイルをロードします mail.jarとactivation.jarをロードします applicationContext.xmlファイルでユーザー名とパスワード属性を変更し、自分のgmail IDとパスワードを指定します。 Test.javaファイルで送信者gmail IDとReceivermail IDを変更します。 Testクラスをコンパイルして実行します


ホストプロバイダーが提供するサービスを使用してSpringでメールを送信する例

自分のサイトがある場合、メールサーバーを使用できます。MailMail.javaとTestクラスは同じです。Test.javaファイルで送信者メールIDを変更する必要があります。applicationContext.xmlファイルでいくつかの変更が必要です。

applicationContext.xmlファイルで、以下を使用しています:

mail.unitedsquaad.comがホスト名です。変更してください。 [email protected]がユーザー名です。変更してください。 xxxxxがパスワードです。変更してください。

<?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:p="http://www.springframework.org/schema/p
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="host" value="mail.unitedsquaad.com" />
  <property name="username" value="[email protected]" />
  <property name="password" value="xxxxx" />
 
  </property>
     </props>
              <prop key="mail.smtp.auth">true</prop>/prop>
           </props>
  </property>
</bean>
<bean id="mailMail" class="MailMail">
  <property name="mailSender" ref="mailSender" />
</bean>
 
</beans>

将邮件发送到多个收件人

您可以借助SimpleMailMessage类将邮件发送到多个收件人。 SimpleMailMessage类的 setTo(String []接收者)方法用于将消息发送到多个接收者。让我们看一下简单的代码。

      ....
  public void sendMail(String from, String[] to, String subject, String msg) {
        //creating message
    SimpleMailMessage message = new SimpleMailMessage();
    message.setFrom(from);
    message.setTo(to);//passing array of recipients
    message.setSubject(subject);
    message.setText(msg);
        //sending message
    mailSender.send(message); 
  }
     ...

Spring MimeMessagePreparator示例

我们可以借助MimeMessagePreparator接口发送mime消息。它有一个方法prepare(MimeMessage message)。

让我们看一下发送mime消息的简单代码。

  import javax.mail.Message;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessagePreparator;
public class MailMail{
  private JavaMailSender mailSender;
 
  public void setMailSender(JavaMailSender mailSender) {
    this.mailSender = mailSender;
  }
 
  public void sendMail(final String from, final String to, final String subject, final String msg) {
      
    MimeMessagePreparator messagePreparator = new MimeMessagePreparator() {
          
                public void prepare(MimeMessage mimeMessage) throws Exception {
                   mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
                   mimeMessage.setFrom(new InternetAddress(from));
                   mimeMessage.setSubject(subject);
                   mimeMessage.setText(msg);
                }
        };
        mailSender.send(messagePreparator);
  }
}

applicationContext.xmlとTest.javaファイルは上記のものと同じです。


Spring MimeMessageHelperを使用して附件を送信する例

MimeMessageHelperクラスの助けを借りて、Springで添付付きのMIMEメッセージを送信できます。MimeMessagePreparatorの使用が推奨されます。

添付(画像)付きのMIMEメッセージを送信する簡単なコードを見てみましょう。

import java.io.File;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
public class MailMail{
  private JavaMailSender mailSender;
 
  public void setMailSender(JavaMailSender mailSender) {
    this.mailSender = mailSender;
  }
 
  public void sendMail(final String from, final String to, final String subject, final String msg) {
    try{
    MimeMessage message = mailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(message, true);
    helper.setFrom(from);
    helper.setTo(to);
    helper.setSubject(subject);
    helper.setText(msg);
    // ファイルを付属
    FileSystemResource file = new FileSystemResource(new File("c:",/rr.jpg"));
    helper.addAttachment("mybrothermage.jpg", file);//この名前で画像が送信されます
    mailSender.send(message);
    catch(MessagingException e){e.printStackTrace();}
  }
}

applicationContext.xmlとTest.javaファイルは上記のものと同じです。