質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

5797閲覧

JavaMail でPDF or PNGを添付すると、届いた先でテキストファイルと認識されてしまう。

kentaro_inoue

総合スコア45

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/12/13 10:26

JavaMail でPDF or PNG を添付すると、届いた先でテキストファイルと認識されてしまいます。
タイプの指定方法がいまいち分からないので、
ご存知の方おりましたらお知恵を拝借できませんでしょうか?

ちなみにメールはサンダーバードで見ています。

java

1public class MailSend { 2 3 4 /** 5 * メール送信を行う。 6 * 7 * @param args 8 * 第1引数:プロパティファイル 第2引数以降:添付ファイル 9 * @throws Exception 10 * 異常終了した場合 11 */ 12 13 private static final String ENCODE = "UTF-8"; 14 private static final int SUCCESS = 0; 15 private static final int FAILED = 9; 16 public static void main(String[] args) throws Exception { 17 try { 18 Properties config = new Properties(); 19 if (args.length == 0) { 20 throw new IllegalArgumentException("引数が不正です。"); 21 } 22 23 InputStreamReader propFile = new InputStreamReader(new FileInputStream(args[0]), ENCODE); 24 config.load(propFile); 25 26 Session mailSession = Session.getInstance(config, new javax.mail.Authenticator() { 27 protected PasswordAuthentication getPasswordAuthentication() { 28 return new PasswordAuthentication(config.getProperty("mail.smtp.user"), 29 config.getProperty("mail.smtp.pass")); 30 } 31 }); 32 33 MimeMessage msg = new MimeMessage(mailSession); 34 msg.setFrom(new InternetAddress(config.getProperty("From"))); 35 InternetAddress[] toAddress = InternetAddress.parse(config.getProperty("To")); 36 InternetAddress[] ccAddress = InternetAddress.parse(config.getProperty("Cc")); 37 msg.setRecipients(Message.RecipientType.TO, toAddress); 38 msg.setRecipients(Message.RecipientType.CC, ccAddress); 39 40 msg.setSentDate(new Date()); 41 msg.setSubject(config.getProperty("Subject"), ENCODE); 42 43 // 本文 44 MimeMultipart multiPart = new MimeMultipart(); 45 MimeBodyPart textPart = new MimeBodyPart(); 46 textPart.setText(config.getProperty("Body"), ENCODE); 47 multiPart.addBodyPart(textPart); 48 49 // 添付ファイル(引数) 50 for (int i = 1; i < args.length; i++) { 51 String filePath = args[i]; 52 MimeBodyPart attachPart = new MimeBodyPart(); 53 DataSource fds = new FileDataSource(filePath); 54 DataHandler data = new DataHandler(fds); 55 attachPart.setDataHandler(data); 56 attachPart.setFileName(MimeUtility.encodeWord(fds.getName())); 57 multiPart.addBodyPart(attachPart); 58 } 59 // メールにマルチパートを設定 60 msg.setContent(multiPart); 61 62 Transport.send(msg); 63 System.exit(SUCCESS); 64 } catch (Exception e) { 65 e.printStackTrace(); 66 System.exit(FAILED); 67 } 68 69 } 70 71}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

setHeaderメソッドが無いのが気になります。

下記のページを参考に、ヘッダーを設定してみてください。

JavaMailでのメール送信まとめその1 - あられねこのめも
http://d.hatena.ne.jp/ttshrk/20110405/1301998708
.

それと、メーラーから正常に送ったメールと失敗しているメールの、それぞれ生のメールデータを見比べてみると、何が足りないのかわかるかも知れません。
Thunderbirdで生のメールデータを表示するには、Ctrl+Uキーを押します。

投稿2015/12/13 11:09

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kentaro_inoue

2016/01/12 21:56 編集

argiusさん ありがとうございます! できました!! コード抜粋 ------------------------------ // 添付ファイル(引数) for (File item : fileList) { MimeBodyPart attachPart = new MimeBodyPart(); DataSource fds = new FileDataSource(item); DataHandler data = new DataHandler(fds); attachPart.setDataHandler(data); attachPart.setFileName(MimeUtility.encodeWord(fds.getName())); attachPart.setHeader("Content-Type","application/pdf"); attachPart.setDisposition("attachment"); // multiPart.addBodyPart(attachPart); mixedPart.addBodyPart(attachPart); // alter } ---------------------------------- この対応により、 生のメールデータが以下の通り変化し、想定どおりの結果を得ることができました。 ■修正前 --001a1148e998b167c80526c6230d Content-Type: text/plain; charset=US-ASCII; name="file1.pdf" Content-Disposition: attachment; filename="file1.pdf" Content-Transfer-Encoding: base64 X-Attachment-Id: c33b9559ee51f689_0.1 ■修正後 ------=_Part_0_194707680.1450008431408 Content-Type: application/pdf; charset="utf-8" Content-Transfer-Encoding: base64 Content-Disposition: attachment ; filename=file2.pdf ありがとう御座います! 助かりました!
argius

2015/12/13 12:31

回答、合ってたみたいですね。良かったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問