山崎屋の技術メモ

IT業界で働く中でテクノロジーを愛するSIerのシステムエンジニア👨‍💻 | AndroidとWebアプリの二刀流🧙‍♂️ | コードの裏にあるストーリーを綴るブログ執筆者✍️ | 日々進化するデジタル世界で学び続ける探究者🚀 | #TechLover #CodeArtisan、気になること、メモしておきたいことを書いていきます。

【Java】添付ファイル付きメールを送る

前回は単純なテキストメールの送信方法を紹介しました。

www.shookuro.com

今回は添付ファイル付きのメールを送りたいと思います。

せっかくなので種類の違うプレーンテキストと PDF の 2 種類のファイルを添付したいと思います。

maven の pom.xml の記載と「安全性の低いアプリのアクセス」の許可は前回の記事を参照してください。

あとテキストファイル「テキスト.txt」と PDF ファイル「sample.pdf」を用意しておいてください。

package org.yyama;

import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.util.ByteArrayDataSource;

public class Mail {
	public static void main(String[] args) {
		try {
			Properties property = new Properties();
			property.put("mail.smtp.host", "smtp.gmail.com");
			property.put("mail.smtp.auth", "true");
			property.put("mail.smtp.starttls.enable", "true");
			property.put("mail.smtp.host", "smtp.gmail.com");
			property.put("mail.smtp.port", "587");
			property.put("mail.smtp.debug", "true");

			Session session = Session.getInstance(property, new javax.mail.Authenticator() {
				protected PasswordAuthentication getPasswordAuthentication() {
					return new PasswordAuthentication("Gmailのアカウント", "Gmailのパスワード");
				}
			});
			
			// テキスト部分
			MimeBodyPart part1 = new MimeBodyPart();
			part1.setText("テキスト", "iso-2022-jp");
			
			// テキストファイル部分
			DataSource dataSource2 = new ByteArrayDataSource(new FileInputStream( new File("テキスト.txt")),"text/plain");
			MimeBodyPart part2 = new MimeBodyPart();
			part2.setDataHandler(new DataHandler(dataSource2));
			part2.setFileName("テキスト.txt");
			
			// PDFファイル部分
			DataSource dataSource3 = new ByteArrayDataSource(new FileInputStream( new File("sample.pdf")),"application/pdf");
			MimeBodyPart part3 = new MimeBodyPart();
			part3.setDataHandler(new DataHandler(dataSource3));
			part3.setFileName("sample.pdf");
			
			final MimeMultipart multipart = new MimeMultipart();
			multipart.addBodyPart(part1);
			multipart.addBodyPart(part2);
			multipart.addBodyPart(part3);

			MimeMessage mimeMessage = new MimeMessage(session);
			InternetAddress toAddress = new InternetAddress("受信者のメールアドレス", "受信者名");
			mimeMessage.setRecipient(Message.RecipientType.TO, toAddress);
			InternetAddress fromAddress = new InternetAddress("送信者のメールアドレス", "送信者");
			mimeMessage.setFrom(fromAddress);
			mimeMessage.setSubject("title", "ISO-2022-JP");
			mimeMessage.setContent(multipart);
			Transport.send(mimeMessage);
			
			System.out.println("メール送信が完了しました。");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}



細かい説明は省略しますが、このプログラムで正しくメールが送信できました。

f:id:yyama1556:20210508145312p:plain
 
 
本日はここまで!

やさしいJava 第7版 (「やさしい」シリーズ)

やさしいJava 第7版 (「やさしい」シリーズ)

スッキリわかるJava入門 第3版 (スッキリシリーズ)

スッキリわかるJava入門 第3版 (スッキリシリーズ)