📄 mimemessagehelper.java
字号:
addCc(new InternetAddress(cc));
}
public void addCc(String cc, String personal) throws MessagingException, UnsupportedEncodingException {
Assert.notNull(cc, "Cc address must not be null");
addCc(getEncoding() != null ?
new InternetAddress(cc, personal, getEncoding()) :
new InternetAddress(cc, personal));
}
public void setBcc(InternetAddress bcc) throws MessagingException {
Assert.notNull(bcc, "Bcc address must not be null");
validateAddress(bcc);
this.mimeMessage.setRecipient(Message.RecipientType.BCC, bcc);
}
public void setBcc(InternetAddress[] bcc) throws MessagingException {
Assert.notNull(bcc, "Bcc address array must not be null");
validateAddresses(bcc);
this.mimeMessage.setRecipients(Message.RecipientType.BCC, bcc);
}
public void setBcc(String bcc) throws MessagingException {
Assert.notNull(bcc, "Bcc address must not be null");
setBcc(new InternetAddress(bcc));
}
public void setBcc(String[] bcc) throws MessagingException {
Assert.notNull(bcc, "Bcc address array must not be null");
InternetAddress[] addresses = new InternetAddress[bcc.length];
for (int i = 0; i < bcc.length; i++) {
addresses[i] = new InternetAddress(bcc[i]);
}
setBcc(addresses);
}
public void addBcc(InternetAddress bcc) throws MessagingException {
Assert.notNull(bcc, "Bcc address must not be null");
validateAddress(bcc);
this.mimeMessage.addRecipient(Message.RecipientType.BCC, bcc);
}
public void addBcc(String bcc) throws MessagingException {
Assert.notNull(bcc, "Bcc address must not be null");
addBcc(new InternetAddress(bcc));
}
public void addBcc(String bcc, String personal) throws MessagingException, UnsupportedEncodingException {
Assert.notNull(bcc, "Bcc address must not be null");
addBcc(getEncoding() != null ?
new InternetAddress(bcc, personal, getEncoding()) :
new InternetAddress(bcc, personal));
}
public void setSentDate(Date sentDate) throws MessagingException {
Assert.notNull(sentDate, "Sent date must not be null");
this.mimeMessage.setSentDate(sentDate);
}
public void setSubject(String subject) throws MessagingException {
Assert.notNull(subject, "Subject must not be null");
if (getEncoding() != null) {
this.mimeMessage.setSubject(subject, getEncoding());
}
else {
this.mimeMessage.setSubject(subject);
}
}
/**
* Set the given text directly as content in non-multipart mode
* or as default body part in multipart mode.
* Always applies the default content type "text/plain".
* <p><b>NOTE:</b> Invoke addInline <i>after</i> setText; else, mail
* readers might not be able to resolve inline references correctly.
* @param text the text for the message
* @throws MessagingException in case of errors
* @see #addInline
*/
public void setText(String text) throws MessagingException {
setText(text, false);
}
/**
* Set the given text directly as content in non-multipart mode
* or as default body part in multipart mode.
* The "html" flag determines the content type to apply.
* <p><b>NOTE:</b> Invoke addInline <i>after</i> setText; else, mail
* readers might not be able to resolve inline references correctly.
* @param text the text for the message
* @param html whether to apply content type "text/html" for an
* HTML mail, using default content type ("text/plain") else
* @throws MessagingException in case of errors
* @see #addInline
*/
public void setText(String text, boolean html) throws MessagingException {
Assert.notNull(text, "Text must not be null");
MimePart partToUse = null;
if (this.mimeMultipart != null) {
partToUse = getMainPart();
}
else {
partToUse = this.mimeMessage;
}
if (html) {
setHtmlTextToMimePart(partToUse, text);
}
else {
setPlainTextToMimePart(partToUse, text);
}
}
/**
* Set the given plain text and HTML text as alternatives, offering
* both options to the email client. Requires multipart mode.
* <p><b>NOTE:</b> Invoke addInline <i>after</i> setText; else, mail
* readers might not be able to resolve inline references correctly.
* @param plainText the plain text for the message
* @param htmlText the HTML text for the message * @throws MessagingException in case of errors
* @see #addInline
*/
public void setText(String plainText, String htmlText) throws MessagingException {
Assert.notNull(plainText, "Plain text must not be null");
Assert.notNull(htmlText, "HTML text must not be null");
Multipart messageBody = new MimeMultipart(MULTIPART_SUBTYPE_ALTERNATIVE);
MimeBodyPart mimeBodyPart;
// create the plain text part of the message
mimeBodyPart = new MimeBodyPart();
setPlainTextToMimePart(mimeBodyPart, plainText);
messageBody.addBodyPart(mimeBodyPart);
// create the HTML text part of the message
mimeBodyPart = new MimeBodyPart();
setHtmlTextToMimePart(mimeBodyPart, htmlText);
messageBody.addBodyPart(mimeBodyPart);
getMainPart().setContent(messageBody, CONTENT_TYPE_ALTERNATIVE);
}
private MimeBodyPart getMainPart() throws MessagingException {
MimeMultipart mimeMultipart = getMimeMultipart();
MimeBodyPart bodyPart = null;
for (int i = 0; i < mimeMultipart.getCount(); i++) {
BodyPart bp = mimeMultipart.getBodyPart(i);
if (bp.getFileName() == null) {
bodyPart = (MimeBodyPart) bp;
}
}
if (bodyPart == null) {
MimeBodyPart mimeBodyPart = new MimeBodyPart();
mimeMultipart.addBodyPart(mimeBodyPart);
bodyPart = mimeBodyPart;
}
return bodyPart;
}
private void setPlainTextToMimePart(MimePart mimePart, String text)
throws MessagingException {
if (getEncoding() != null) {
mimePart.setText(text, getEncoding());
}
else {
mimePart.setText(text);
}
}
private void setHtmlTextToMimePart(MimePart mimePart, String text)
throws MessagingException {
if (getEncoding() != null) {
mimePart.setContent(text, CONTENT_TYPE_HTML + CONTENT_TYPE_CHARSET_SUFFIX + getEncoding());
}
else {
mimePart.setContent(text, CONTENT_TYPE_HTML);
}
}
/**
* Add an inline element to the MimeMessage, taking the content from a
* <code>javax.activation.DataSource</code>.
* <p>Note that the InputStream returned by the DataSource implementation
* needs to be a <i>fresh one on each call</i>, as JavaMail will invoke
* getInputStream() multiple times.
* <p><b>NOTE:</b> Invoke addInline <i>after</i> setText; else, mail
* readers might not be able to resolve inline references correctly.
* @param contentId the content ID to use. Will end up as "Content-ID" header
* in the body part, surrounded by angle brackets: e.g. "myId" -> "<myId>".
* Can be referenced in HTML source via src="cid:myId" expressions.
* @param dataSource the <code>javax.activation.DataSource</code> to take
* the content from, determining the InputStream and the content type
* @throws MessagingException in case of errors
* @see #setText
* @see #addAttachment(String, File)
* @see #addAttachment(String, org.springframework.core.io.InputStreamSource)
*/
public void addInline(String contentId, DataSource dataSource) throws MessagingException {
Assert.notNull(contentId, "Content ID must not be null");
Assert.notNull(dataSource, "DataSource must not be null");
MimeBodyPart mimeBodyPart = new MimeBodyPart();
mimeBodyPart.setDataHandler(new DataHandler(dataSource));
// We're using setHeader here to stay compatible with JavaMail 1.2,
// rather than JavaMail 1.3's setContentID.
mimeBodyPart.setHeader(HEADER_CONTENT_ID, "<" + contentId + ">");
mimeBodyPart.setDisposition(MimeBodyPart.INLINE);
getMimeMultipart().addBodyPart(mimeBodyPart);
}
/**
* Add an inline element to the MimeMessage, taking the content from a
* <code>java.io.File</code>.
* <p>The content type will be determined by the name of the given
* content file. Do not use this for temporary files with arbitrary
* filenames (possibly ending in ".tmp" or the like)!
* <p><b>NOTE:</b> Invoke addInline <i>after</i> setText; else, mail
* readers might not be able to resolve inline references correctly.
* @param contentId the content ID to use. Will end up as "Content-ID" header
* in the body part, surrounded by angle brackets: e.g. "myId" -> "<myId>".
* Can be referenced in HTML source via src="cid:myId" expressions.
* @param file the File resource to take the content from
* @throws MessagingException in case of errors
* @see #setText
* @see #addAttachment(String, org.springframework.core.io.InputStreamSource)
* @see #addAttachment(String, javax.activation.DataSource)
*/
public void addInline(String contentId, File file) throws MessagingException {
Assert.notNull(file, "File must not be null");
addInline(contentId, new FileDataSource(file));
}
/**
* Add an inline element to the MimeMessage, taking the content from an
* <code>org.springframework.core.io.InputStreamResource</code>.
* <p>The content type will be determined by the name of the given
* content file. Do not use this for temporary files with arbitrary
* filenames (possibly ending in ".tmp" or the like)!
* <p><b>NOTE:</b> Invoke addInline <i>after</i> setText; else, mail
* readers might not be able to resolve inline references correctly.
* @param contentId the content ID to use. Will end up as "Content-ID" header
* in the body part, surrounded by angle brackets: e.g. "myId" -> "<myId>".
* Can be referenced in HTML source via src="cid:myId" expressions.
* @param resource the resource to take the content from
* @throws MessagingException in case of errors
* @see #setText
* @see #addAttachment(String, File)
* @see #addAttachment(String, javax.activation.DataSource)
*/
public void addInline(String contentId, Resource resource) throws MessagingException {
Assert.notNull(resource, "Resource must not be null");
String contentType = FileTypeMap.getDefaultFileTypeMap().getContentType(resource.getFilename());
addInline(contentId, resource, contentType);
}
/**
* Add an inline element to the MimeMessage, taking the content from an
* <code>org.springframework.core.InputStreamResource</code>.
* <p>Note that you can determine the content type for any given filename
* via the Activation Framework's FileTypeMap utility:<br>
* <code>FileTypeMap.getDefaultFileTypeMap().getContentType(myFilename)</code>
* <p><b>NOTE:</b> Invoke addInline <i>after</i> setText; else, mail
* readers might not be able to resolve inline references correctly.
* @param contentId the content ID to use. Will end up as "Content-ID" header
* in the body part, surrounded by angle brackets: e.g. "myId" -> "<myId>".
* Can be referenced in HTML source via src="cid:myId" expressions.
* @param inputStreamSource the resource to take the content from
* @param contentType the content type to use for the element
* @throws MessagingException in case of errors
* @see #setText
* @see #addAttachment(String, File)
* @see #addAttachment(String, javax.activation.DataSource)
* @see javax.activation.FileTypeMap#getDefaultFileTypeMap
* @see javax.activation.FileTypeMap#getContentType
*/
public void addInline(String contentId, InputStreamSource inputStreamSource, String contentType)
throws MessagingException {
Assert.notNull(inputStreamSource, "InputStreamSource must not be null");
DataSource dataSource = createDataSource(inputStreamSource, contentType, "inline");
addInline(contentId, dataSource);
}
/**
* Add an attachment to the MimeMessage, taking the content from a
* <code>javax.activation.DataSource</code>.
* <p>Note that the InputStream returned by the DataSource implementation
* needs to be a <i>fresh one on each call</i>, as JavaMail will invoke
* getInputStream() multiple times.
* @param attachmentFilename the name of the attachment as it will
* appear in the mail (the content type will be determined by this)
* @param dataSource the <code>javax.activation.DataSource</code> to take
* the content from, determining the InputStream and the content type
* @throws MessagingException in case of errors
* @see #addAttachment(String, org.springframework.core.io.InputStreamSource)
* @see #addAttachment(String, java.io.File)
*/
public void addAttachment(String attachmentFilename, DataSource dataSource) throws MessagingException {
Assert.notNull(attachmentFilename, "Attachment filename must not be null");
Assert.notNull(dataSource, "DataSource must not be null");
MimeBodyPart mimeBodyPart = new MimeBodyPart();
mimeBodyPart.setFileName(attachmentFilename);
mimeBodyPart.setDataHandler(new DataHandler(dataSource));
getMimeMultipart().addBodyPart(mimeBodyPart);
}
/**
* Add an attachment to the MimeMessage, taking the content from a
* <code>java.io.File</code>.
* <p>The content type will be determined by the name of the given
* content file. Do not use this for temporary files with arbitrary
* filenames (possibly ending in ".tmp" or the like)!
* @param attachmentFilename the name of the attachment as it will
* appear in the mail
* @param file the File resource to take the content from
* @throws MessagingException in case of errors
* @see #addAttachment(String, org.springframework.core.io.InputStreamSource)
* @see #addAttachment(String, javax.activation.DataSource)
*/
public void addAttachment(String attachmentFilename, File file) throws MessagingException {
Assert.notNull(file, "File must not be null");
addAttachment(attachmentFilename, new FileDataSource(file));
}
/**
* Add an attachment to the MimeMessage, taking the content from an
* <code>org.springframework.core.io.InputStreamResource</code>.
* <p>The content type will be determined by the given filename for
* the attachment. Thus, any content source will be fine, including
* temporary files with arbitrary filenames.
* @param attachmentFilename the name of the attachment as it will
* appear in the mail
* @param inputStreamSource the resource to take the content from
* (all of Spring's Resource implementations can be passed in here)
* @throws MessagingException in case of errors
* @see #addAttachment(String, java.io.File)
* @see #addAttachment(String, javax.activation.DataSource)
* @see org.springframework.core.io.Resource
*/
public void addAttachment(String attachmentFilename, InputStreamSource inputStreamSource)
throws MessagingException {
Assert.notNull(inputStreamSource, "InputStreamSource must not be null");
String contentType = FileTypeMap.getDefaultFileTypeMap().getContentType(attachmentFilename);
DataSource dataSource = createDataSource(inputStreamSource, contentType, attachmentFilename);
addAttachment(attachmentFilename, dataSource);
}
/**
* Create an Activation Framework DataSource for the given InputStreamSource.
* @param inputStreamSource the InputStreamSource (typically a Spring Resource)
* @param contentType the content type
* @param name the name of the DataSource
* @return the Activation Framework DataSource
*/
protected DataSource createDataSource(
final InputStreamSource inputStreamSource, final String contentType, final String name) {
return new DataSource() {
public InputStream getInputStream() throws IOException {
return inputStreamSource.getInputStream();
}
public OutputStream getOutputStream() {
throw new UnsupportedOperationException("Read-only javax.activation.DataSource");
}
public String getContentType() {
return contentType;
}
public String getName() {
return name;
}
};
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -