リストなどにメールを送信するアプリケーションに取り組んでいます。javax.mail API を使用して Java で記述されています。ここでの問題は、CID を使用して画像を埋め込むことができないことです。
送信されるメールのソースは次のとおりです。
Delivered-To: -@gmail.com
Received: by 10.43.50.4 with SMTP id vc4csp85536icb;
Tue, 17 Apr 2012 05:08:00 -0700 (PDT)
Received: by 10.204.141.25 with SMTP id k25mr4406030bku.72.1334664479298;
Tue, 17 Apr 2012 05:07:59 -0700 (PDT)
Return-Path: <-@gmail.com>
Received: from mail-bk0-f43.google.com (mail-bk0-f43.google.com [209.85.214.43])
by mx.google.com with ESMTPS id ad16si7984294bkc.150.2012.04.17.05.07.58
(version=TLSv1/SSLv3 cipher=OTHER);
Tue, 17 Apr 2012 05:07:59 -0700 (PDT)
Received-SPF: pass (google.com: domain of -@gmail.com designates 209.85.214.43 as permitted sender) client-ip=209.85.214.43;
Authentication-Results: mx.google.com; spf=pass (google.com: domain of - designates 209.85.214.43 as permitted sender) smtp.mail=-; dkim=pass header.i=@gmail.com
Received: by mail-bk0-f43.google.com with SMTP id j5so5978375bkw.2
for <-@gmail.com>; Tue, 17 Apr 2012 05:07:58 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20120113;
h=date:from:to:message-id:subject:mime-version:content-type;
bh=Xj44O9fBIzirvcquOGxJbYLtbqgBc2Ags7prNUuAtSQ=;
b=WWTCdrFgs3RCT/g2qXHR0fLCTc73TmNMA15sff0oIDksB6Nn3IwTYAqTVmoGiNrkW5
08WDpTRADEKAOvjQ5FC9/uBCh1RXWTjxtawfjHc7vfUpqKbXOCj8Ab6GWXQMmX/+WB6T
KVYLhk3/+GddIJI1XsAX9zprSYVcP6MMJ5/U+idIDlC7xQGGNuvzvpAnlnlGuWzgKc6j
qPoFSAAaio6zICY9uSaI0deBIYTEQ2hIuBDJG8oaRvGVvpjhzJaBK+ab+rPJEboHPg8S
3WSCG/Pp212VOw/YXOLUQV0jmMbuqAbsGdeER+Okbwe11sWi+zvPz+jhplB0NB2wq0Fn
mWzA==
Received: by 10.204.130.13 with SMTP id q13mr4084640bks.128.1334664478358;
Tue, 17 Apr 2012 05:07:58 -0700 (PDT)
Return-Path: <-t@gmail.com>
Received: from Akoya ([xx])
by mx.google.com with ESMTPS id z14sm37467763bky.15.2012.04.17.05.07.51
(version=SSLv3 cipher=OTHER);
Tue, 17 Apr 2012 05:07:54 -0700 (PDT)
Date: Tue, 17 Apr 2012 05:07:54 -0700 (PDT)
From: BP MM <-@gmail.com>
To: xx xx <-@gmail.com>
Message-ID: <404745073.01334664469900.JavaMail.xx@Akoya>
Subject: TestImage
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_2_854532868.1334664469871"
------=_Part_2_854532868.1334664469871
Content-Type: multipart/mixed;
boundary="----=_Part_1_1457048287.1334664469871"
------=_Part_1_1457048287.1334664469871
Content-Type: image/png; name=logo.png
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=logo.png
Content-ID: img_cid
[base64 data]
------=_Part_1_1457048287.1334664469871--
------=_Part_2_854532868.1334664469871
Content-Type: multipart/alternative;
boundary="----=_Part_0_1033690582.1334664469858"
------=_Part_0_1033690582.1334664469858
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Hello
------=_Part_0_1033690582.1334664469858
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit
<html>
<body>
<H1>Hello</H1>
<img src="cid:img_cid">
</body>
</html>
------=_Part_0_1033690582.1334664469858--
------=_Part_2_854532868.1334664469871--
CID に < と > を追加し、気質をインラインに設定し、HTML を検証するなど、さまざまな CID を試しました。クライアントがメールでcidを探すと読んだので、画像を正しく取得する必要があると考えました。添付ファイルの送信は機能しますが、埋め込みは機能しません。手がかりを持っている人はいますか?マルチパート構造に関連していますか?
メッセージを作成するためのJavaコード(解決しようとしていくつかの行にコメントしました..)
/*
* The method to create a MimeMessage, this message can be sent with the transport method.
*/
private Message createMessage(final Mail mail, final Member member, final MailingList list,
final MailAccount mailAccount, final Session session)
throws MessagingException, UnsupportedEncodingException {
// Get attachments
@SuppressWarnings("unchecked")
List<File> attachments = (List<File>) mail.getProperty(Mail.ATTACHMENTS_KEY);
// Create content parts
String plainContent = templateEngine.replaceTemplateTags(mail, member, list, mailAccount);
String htmlContent = templateEngine.replaceHTMLTemplateTags(mail, member, list, mailAccount);
Multipart multiContentPart = new MimeMultipart("alternative");
// Multipart attachmentsBodyPart = new MimeMultipart();
Multipart rootBodyPart = new MimeMultipart();
// Create plain text part
if (!plainContent.equals("")) {
BodyPart plainMessageBodyPart = new MimeBodyPart();
plainMessageBodyPart.setContent(plainContent, "text/plain");
multiContentPart.addBodyPart(plainMessageBodyPart);
}
// Create html part
if (!htmlContent.equals("")) {
BodyPart htmlMessageBodyPart = new MimeBodyPart();
htmlMessageBodyPart.setContent(htmlContent, "text/html");
multiContentPart.addBodyPart(htmlMessageBodyPart);
}
// Create attachments
if (attachments != null && attachments.size() > 0) {
for (int i = 0; i < attachments.size(); i++) {
BodyPart attachmentBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(attachments.get(i));
attachmentBodyPart.setDataHandler(new DataHandler(source));
attachmentBodyPart.setFileName(attachments.get(i).getName());
attachmentBodyPart.setHeader("Content-ID", "<img_cid>");
attachmentBodyPart.setDisposition(Part.INLINE);
// attachmentsBodyPart.addBodyPart(attachmentBodyPart);
rootBodyPart.addBodyPart(attachmentBodyPart);
}
// Build attachments
// BodyPart attachmentsWrapper = new MimeBodyPart();
// attachmentsWrapper.setContent(attachmentsBodyPart);
// rootBodyPart.addBodyPart(attachmentsWrapper);
}
// Build content
BodyPart contentWrapper = new MimeBodyPart();
contentWrapper.setContent(multiContentPart);
rootBodyPart.addBodyPart(contentWrapper);
// Create message
Message message = new MimeMessage(session);
message.setRecipient(Message.RecipientType.TO, new InternetAddress(
member.getEmail(), member.getName()));
message.setSubject((String) mail.getProperty(Mail.SUBJECT_KEY));
message.setContent(rootBodyPart);
// Add headers
message.setFrom(new InternetAddress(mailAccount.getFromAddress(),
mailAccount.getFromName()));
if (mailAccount.getReplyTo() != "" && mailAccount.getReplyTo() != null)
message.setReplyTo(InternetAddress.parse(mailAccount.getReplyTo()));
return message;
}
各添付ファイルの CID が同じであることは気にしないでください。後でこれがファイル名になります。今のところ、1 つの添付ファイルでのみテストしています。お役に立てれば..