Class MimeMessageHelper
MimeMessage
.
Mirrors the simple setters of SimpleMailMessage
,
directly applying the values to the underlying MimeMessage. Allows for defining
a character encoding for the entire message, automatically applied by all methods
of this helper class.
Offers support for HTML text content, inline elements such as images, and typical mail attachments. Also supports personal names that accompany mail addresses. Note that advanced settings can still be applied directly to the underlying MimeMessage object!
Typically used in MimeMessagePreparator
implementations or
JavaMailSender
client code: simply instantiating it as a MimeMessage wrapper,
invoking setters on the wrapper, using the underlying MimeMessage for mail sending.
Also used internally by JavaMailSenderImpl
.
Sample code for an HTML mail with an inline image and a PDF attachment:
mailSender.send(new MimeMessagePreparator() { public void prepare(MimeMessage mimeMessage) throws MessagingException { MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8"); message.setFrom("[email protected]"); message.setTo("[email protected]"); message.setSubject("my subject"); message.setText("my text <img src='cid:myLogo'>", true); message.addInline("myLogo", new ClassPathResource("img/mylogo.gif")); message.addAttachment("myDocument.pdf", new ClassPathResource("doc/myDocument.pdf")); } });Consider using
MimeMailMessage
(which implements the common
MailMessage
interface, just like
SimpleMailMessage
) on top of this helper,
in order to let message population code interact with a simple message
or a MIME message through a common interface.
Warning regarding multipart mails: Simple MIME messages that just contain HTML text but no inline elements or attachments will work on more or less any email client that is capable of HTML rendering. However, inline elements and attachments are still a major compatibility issue between email clients: It's virtually impossible to get inline elements and attachments working across Microsoft Outlook, Lotus Notes and Mac Mail. Consider choosing a specific multipart mode for your needs: The javadoc on the MULTIPART_MODE constants contains more detailed information.
- Since:
- 19.01.2004
- Author:
- Juergen Hoeller, Sam Brannen
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
Constant indicating a multipart message with a single root multipart element of type "mixed".static final int
Constant indicating a multipart message with a root multipart element "mixed" plus a nested multipart element of type "related".static final int
Constant indicating a non-multipart message.static final int
Constant indicating a multipart message with a single root multipart element of type "related". -
Constructor Summary
ConstructorDescriptionMimeMessageHelper
(MimeMessage mimeMessage) Create a new MimeMessageHelper for the given MimeMessage, assuming a simple text message (no multipart content, i.e.MimeMessageHelper
(MimeMessage mimeMessage, boolean multipart) Create a new MimeMessageHelper for the given MimeMessage, in multipart mode (supporting alternative texts, inline elements and attachments) if requested.MimeMessageHelper
(MimeMessage mimeMessage, boolean multipart, String encoding) Create a new MimeMessageHelper for the given MimeMessage, in multipart mode (supporting alternative texts, inline elements and attachments) if requested.MimeMessageHelper
(MimeMessage mimeMessage, int multipartMode) Create a new MimeMessageHelper for the given MimeMessage, in multipart mode (supporting alternative texts, inline elements and attachments) if requested.MimeMessageHelper
(MimeMessage mimeMessage, int multipartMode, String encoding) Create a new MimeMessageHelper for the given MimeMessage, in multipart mode (supporting alternative texts, inline elements and attachments) if requested.MimeMessageHelper
(MimeMessage mimeMessage, String encoding) Create a new MimeMessageHelper for the given MimeMessage, assuming a simple text message (no multipart content, i.e. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addAttachment
(String attachmentFilename, DataSource dataSource) Add an attachment to the MimeMessage, taking the content from ajakarta.activation.DataSource
.void
addAttachment
(String attachmentFilename, File file) Add an attachment to the MimeMessage, taking the content from ajava.io.File
.void
addAttachment
(String attachmentFilename, InputStreamSource inputStreamSource) Add an attachment to the MimeMessage, taking the content from anorg.springframework.core.io.InputStreamResource
.void
addAttachment
(String attachmentFilename, InputStreamSource inputStreamSource, String contentType) Add an attachment to the MimeMessage, taking the content from anorg.springframework.core.io.InputStreamResource
.void
addBcc
(InternetAddress bcc) void
void
void
addCc
(InternetAddress cc) void
void
void
addInline
(String contentId, DataSource dataSource) Add an inline element to the MimeMessage, taking the content from ajakarta.activation.DataSource
.void
Add an inline element to the MimeMessage, taking the content from ajava.io.File
.void
addInline
(String contentId, String inlineFilename, DataSource dataSource) Add an inline element to the MimeMessage, taking the content from ajakarta.activation.DataSource
and assigning the providedinlineFileName
to the element.void
addInline
(String contentId, String inlineFilename, InputStreamSource inputStreamSource) Add an inline element to the MimeMessage, taking the content from anorg.springframework.core.InputStreamResource
, and specifying the inline fileName explicitly.void
addInline
(String contentId, String inlineFilename, InputStreamSource inputStreamSource, String contentType) Add an inline element to the MimeMessage, taking the content from anorg.springframework.core.InputStreamResource
, and specifying the inline fileName and content type explicitly.void
addInline
(String contentId, InputStreamSource inputStreamSource, String contentType) Add an inline element to the MimeMessage, taking the content from anorg.springframework.core.InputStreamResource
, and specifying the content type explicitly.void
Add an inline element to the MimeMessage, taking the content from aorg.springframework.core.io.Resource
.void
addTo
(InternetAddress to) void
void
protected DataSource
createDataSource
(InputStreamSource inputStreamSource, String contentType, String name) Create an Activation Framework DataSource for the given InputStreamSource.protected void
createMimeMultiparts
(MimeMessage mimeMessage, int multipartMode) Determine the MimeMultipart objects to use, which will be used to store attachments on the one hand and text(s) and inline elements on the other hand.protected String
getDefaultEncoding
(MimeMessage mimeMessage) Determine the default encoding for the given MimeMessage.protected FileTypeMap
getDefaultFileTypeMap
(MimeMessage mimeMessage) Determine the default Java Activation FileTypeMap for the given MimeMessage.Return the specific character encoding used for this message, if any.Return theFileTypeMap
used by this MimeMessageHelper.final MimeMessage
Return the underlying MimeMessage object.final MimeMultipart
Return the underlying MIME "multipart/related" object, if any.final MimeMultipart
Return the root MIME "multipart/mixed" object, if any.boolean
Return whether to encode attachment filenames passed to this helper's#addAttachment
methods.final boolean
Return whether this helper is in multipart mode, i.e.boolean
Return whether this helper will validate all addresses passed to it.void
setBcc
(InternetAddress bcc) void
setBcc
(InternetAddress[] bcc) void
void
void
setCc
(InternetAddress cc) void
setCc
(InternetAddress[] cc) void
void
void
setEncodeFilenames
(boolean encodeFilenames) Set whether to encode attachment filenames passed to this helper's#addAttachment
methods.void
setFileTypeMap
(FileTypeMap fileTypeMap) Set the Java Activation FrameworkFileTypeMap
to use for determining the content type of inline content and attachments that get added to the message.void
setFrom
(InternetAddress from) void
void
protected final void
setMimeMultiparts
(MimeMultipart root, MimeMultipart main) Set the given MimeMultipart objects for use by this MimeMessageHelper.void
setPriority
(int priority) Set the priority ("X-Priority" header) of the message.void
setReplyTo
(InternetAddress replyTo) void
setReplyTo
(String replyTo) void
setReplyTo
(String replyTo, String personal) void
setSentDate
(Date sentDate) Set the sent-date of the message.void
setSubject
(String subject) Set the subject of the message, using the correct encoding.void
Set the given text directly as content in non-multipart mode or as default body part in multipart mode.void
Set the given text directly as content in non-multipart mode or as default body part in multipart mode.void
Set the given plain text and HTML text as alternatives, offering both options to the email client.void
setTo
(InternetAddress to) void
setTo
(InternetAddress[] to) void
void
void
setValidateAddresses
(boolean validateAddresses) Set whether to validate all addresses which get passed to this helper.protected void
validateAddress
(InternetAddress address) Validate the given mail address.protected void
validateAddresses
(InternetAddress[] addresses) Validate all given mail addresses.
-
Field Details
-
MULTIPART_MODE_NO
public static final int MULTIPART_MODE_NOConstant indicating a non-multipart message.- See Also:
-
MULTIPART_MODE_MIXED
public static final int MULTIPART_MODE_MIXEDConstant indicating a multipart message with a single root multipart element of type "mixed". Texts, inline elements and attachements will all get added to that root element.This was Spring 1.0's default behavior. It is known to work properly on Outlook. However, other mail clients tend to misinterpret inline elements as attachments and/or show attachments inline as well.
- See Also:
-
MULTIPART_MODE_RELATED
public static final int MULTIPART_MODE_RELATEDConstant indicating a multipart message with a single root multipart element of type "related". Texts, inline elements and attachements will all get added to that root element.This was the default behavior from Spring 1.1 up to 1.2 final. This is the "Microsoft multipart mode", as natively sent by Outlook. It is known to work properly on Outlook, Outlook Express, Yahoo Mail, and to a large degree also on Mac Mail (with an additional attachment listed for an inline element, despite the inline element also shown inline). Does not work properly on Lotus Notes (attachments won't be shown there).
- See Also:
-
MULTIPART_MODE_MIXED_RELATED
public static final int MULTIPART_MODE_MIXED_RELATEDConstant indicating a multipart message with a root multipart element "mixed" plus a nested multipart element of type "related". Texts and inline elements will get added to the nested "related" element, while attachments will get added to the "mixed" root element.This is the default since Spring 1.2.1. This is arguably the most correct MIME structure, according to the MIME spec: It is known to work properly on Outlook, Outlook Express, Yahoo Mail, and Lotus Notes. Does not work properly on Mac Mail. If you target Mac Mail or experience issues with specific mails on Outlook, consider using MULTIPART_MODE_RELATED instead.
- See Also:
-
-
Constructor Details
-
MimeMessageHelper
Create a new MimeMessageHelper for the given MimeMessage, assuming a simple text message (no multipart content, i.e. no alternative texts and no inline elements or attachments).The character encoding for the message will be taken from the passed-in MimeMessage object, if carried there. Else, JavaMail's default encoding will be used.
- Parameters:
mimeMessage
- the mime message to work on- See Also:
-
MimeMessageHelper
Create a new MimeMessageHelper for the given MimeMessage, assuming a simple text message (no multipart content, i.e. no alternative texts and no inline elements or attachments).- Parameters:
mimeMessage
- the mime message to work onencoding
- the character encoding to use for the message- See Also:
-
MimeMessageHelper
Create a new MimeMessageHelper for the given MimeMessage, in multipart mode (supporting alternative texts, inline elements and attachments) if requested.Consider using the MimeMessageHelper constructor that takes a multipartMode argument to choose a specific multipart mode other than MULTIPART_MODE_MIXED_RELATED.
The character encoding for the message will be taken from the passed-in MimeMessage object, if carried there. Else, JavaMail's default encoding will be used.
- Parameters:
mimeMessage
- the mime message to work onmultipart
- whether to create a multipart message that supports alternative texts, inline elements and attachments (corresponds to MULTIPART_MODE_MIXED_RELATED)- Throws:
MessagingException
- if multipart creation failed- See Also:
-
MimeMessageHelper
public MimeMessageHelper(MimeMessage mimeMessage, boolean multipart, @Nullable String encoding) throws MessagingException Create a new MimeMessageHelper for the given MimeMessage, in multipart mode (supporting alternative texts, inline elements and attachments) if requested.Consider using the MimeMessageHelper constructor that takes a multipartMode argument to choose a specific multipart mode other than MULTIPART_MODE_MIXED_RELATED.
- Parameters:
mimeMessage
- the mime message to work onmultipart
- whether to create a multipart message that supports alternative texts, inline elements and attachments (corresponds to MULTIPART_MODE_MIXED_RELATED)encoding
- the character encoding to use for the message- Throws:
MessagingException
- if multipart creation failed- See Also:
-
MimeMessageHelper
Create a new MimeMessageHelper for the given MimeMessage, in multipart mode (supporting alternative texts, inline elements and attachments) if requested.The character encoding for the message will be taken from the passed-in MimeMessage object, if carried there. Else, JavaMail's default encoding will be used.
- Parameters:
mimeMessage
- the mime message to work onmultipartMode
- which kind of multipart message to create (MIXED, RELATED, MIXED_RELATED, or NO)- Throws:
MessagingException
- if multipart creation failed- See Also:
-
MimeMessageHelper
public MimeMessageHelper(MimeMessage mimeMessage, int multipartMode, @Nullable String encoding) throws MessagingException Create a new MimeMessageHelper for the given MimeMessage, in multipart mode (supporting alternative texts, inline elements and attachments) if requested.- Parameters:
mimeMessage
- the mime message to work onmultipartMode
- which kind of multipart message to create (MIXED, RELATED, MIXED_RELATED, or NO)encoding
- the character encoding to use for the message- Throws:
MessagingException
- if multipart creation failed- See Also:
-
-
Method Details
-
getMimeMessage
Return the underlying MimeMessage object. -
createMimeMultiparts
protected void createMimeMultiparts(MimeMessage mimeMessage, int multipartMode) throws MessagingException Determine the MimeMultipart objects to use, which will be used to store attachments on the one hand and text(s) and inline elements on the other hand.Texts and inline elements can either be stored in the root element itself (MULTIPART_MODE_MIXED, MULTIPART_MODE_RELATED) or in a nested element rather than the root element directly (MULTIPART_MODE_MIXED_RELATED).
By default, the root MimeMultipart element will be of type "mixed" (MULTIPART_MODE_MIXED) or "related" (MULTIPART_MODE_RELATED). The main multipart element will either be added as nested element of type "related" (MULTIPART_MODE_MIXED_RELATED) or be identical to the root element itself (MULTIPART_MODE_MIXED, MULTIPART_MODE_RELATED).
- Parameters:
mimeMessage
- the MimeMessage object to add the root MimeMultipart object tomultipartMode
- the multipart mode, as passed into the constructor (MIXED, RELATED, MIXED_RELATED, or NO)- Throws:
MessagingException
- if multipart creation failed- See Also:
-
setMimeMultiparts
Set the given MimeMultipart objects for use by this MimeMessageHelper.- Parameters:
root
- the root MimeMultipart object, which attachments will be added to; ornull
to indicate no multipart at allmain
- the main MimeMultipart object, which text(s) and inline elements will be added to (can be the same as the root multipart object, or an element nested underneath the root multipart element)
-
isMultipart
public final boolean isMultipart()Return whether this helper is in multipart mode, i.e. whether it holds a multipart message.- See Also:
-
getRootMimeMultipart
Return the root MIME "multipart/mixed" object, if any. Can be used to manually add attachments.This will be the direct content of the MimeMessage, in case of a multipart mail.
- Throws:
IllegalStateException
- if this helper is not in multipart mode- See Also:
-
getMimeMultipart
Return the underlying MIME "multipart/related" object, if any. Can be used to manually add body parts, inline elements, etc.This will be nested within the root MimeMultipart, in case of a multipart mail.
- Throws:
IllegalStateException
- if this helper is not in multipart mode- See Also:
-
getDefaultEncoding
Determine the default encoding for the given MimeMessage.- Parameters:
mimeMessage
- the passed-in MimeMessage- Returns:
- the default encoding associated with the MimeMessage,
or
null
if none found
-
getEncoding
Return the specific character encoding used for this message, if any. -
getDefaultFileTypeMap
Determine the default Java Activation FileTypeMap for the given MimeMessage.- Parameters:
mimeMessage
- the passed-in MimeMessage- Returns:
- the default FileTypeMap associated with the MimeMessage, or a default ConfigurableMimeFileTypeMap if none found for the message
- See Also:
-
setFileTypeMap
Set the Java Activation FrameworkFileTypeMap
to use for determining the content type of inline content and attachments that get added to the message.The default is the
FileTypeMap
that the underlying MimeMessage carries, if any, or the Activation Framework's defaultFileTypeMap
instance else.- See Also:
-
addInline(java.lang.String, jakarta.activation.DataSource)
addAttachment(java.lang.String, jakarta.activation.DataSource)
getDefaultFileTypeMap(jakarta.mail.internet.MimeMessage)
JavaMailSenderImpl.setDefaultFileTypeMap(jakarta.activation.FileTypeMap)
FileTypeMap.getDefaultFileTypeMap()
ConfigurableMimeFileTypeMap
-
getFileTypeMap
Return theFileTypeMap
used by this MimeMessageHelper. -
setEncodeFilenames
public void setEncodeFilenames(boolean encodeFilenames) Set whether to encode attachment filenames passed to this helper's#addAttachment
methods.The default is
false
for standard MIME behavior; turn this totrue
for compatibility with older email clients. On a related note, check out JavaMail'smail.mime.encodefilename
system property.NOTE: The default changed to
false
in 5.3, in favor of JavaMail's standardmail.mime.encodefilename
system property.- Since:
- 5.2.9
- See Also:
-
isEncodeFilenames
public boolean isEncodeFilenames()Return whether to encode attachment filenames passed to this helper's#addAttachment
methods.- Since:
- 5.2.9
- See Also:
-
setValidateAddresses
public void setValidateAddresses(boolean validateAddresses) Set whether to validate all addresses which get passed to this helper.The default is
false
. -
isValidateAddresses
public boolean isValidateAddresses()Return whether this helper will validate all addresses passed to it.- See Also:
-
validateAddress
Validate the given mail address. Called by all of MimeMessageHelper's address setters and adders.The default implementation invokes
InternetAddress.validate()
, provided that address validation is activated for the helper instance.- Parameters:
address
- the address to validate- Throws:
AddressException
- if validation failed- See Also:
-
validateAddresses
Validate all given mail addresses.The default implementation simply delegates to
validateAddress(jakarta.mail.internet.InternetAddress)
for each address.- Parameters:
addresses
- the addresses to validate- Throws:
AddressException
- if validation failed- See Also:
-
setFrom
- Throws:
MessagingException
-
setFrom
- Throws:
MessagingException
-
setFrom
public void setFrom(String from, String personal) throws MessagingException, UnsupportedEncodingException -
setReplyTo
- Throws:
MessagingException
-
setReplyTo
- Throws:
MessagingException
-
setReplyTo
public void setReplyTo(String replyTo, String personal) throws MessagingException, UnsupportedEncodingException -
setTo
- Throws:
MessagingException
-
setTo
- Throws:
MessagingException
-
setTo
- Throws:
MessagingException
-
setTo
- Throws:
MessagingException
-
addTo
- Throws:
MessagingException
-
addTo
- Throws:
MessagingException
-
addTo
public void addTo(String to, String personal) throws MessagingException, UnsupportedEncodingException -
setCc
- Throws:
MessagingException
-
setCc
- Throws:
MessagingException
-
setCc
- Throws:
MessagingException
-
setCc
- Throws:
MessagingException
-
addCc
- Throws:
MessagingException
-
addCc
- Throws:
MessagingException
-
addCc
public void addCc(String cc, String personal) throws MessagingException, UnsupportedEncodingException -
setBcc
- Throws:
MessagingException
-
setBcc
- Throws:
MessagingException
-
setBcc
- Throws:
MessagingException
-
setBcc
- Throws:
MessagingException
-
addBcc
- Throws:
MessagingException
-
addBcc
- Throws:
MessagingException
-
addBcc
public void addBcc(String bcc, String personal) throws MessagingException, UnsupportedEncodingException -
setPriority
Set the priority ("X-Priority" header) of the message.- Parameters:
priority
- the priority value; typically between 1 (highest) and 5 (lowest)- Throws:
MessagingException
- in case of errors
-
setSentDate
Set the sent-date of the message.- Parameters:
sentDate
- the date to set (nevernull
)- Throws:
MessagingException
- in case of errors
-
setSubject
Set the subject of the message, using the correct encoding.- Parameters:
subject
- the subject text- Throws:
MessagingException
- in case of errors
-
setText
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".NOTE: Invoke
addInline(java.lang.String, jakarta.activation.DataSource)
aftersetText
; else, mail readers might not be able to resolve inline references correctly.- Parameters:
text
- the text for the message- Throws:
MessagingException
- in case of errors
-
setText
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.NOTE: Invoke
addInline(java.lang.String, jakarta.activation.DataSource)
aftersetText
; else, mail readers might not be able to resolve inline references correctly.- Parameters:
text
- the text for the messagehtml
- whether to apply content type "text/html" for an HTML mail, using default content type ("text/plain") else- Throws:
MessagingException
- in case of errors
-
setText
Set the given plain text and HTML text as alternatives, offering both options to the email client. Requires multipart mode.NOTE: Invoke
addInline(java.lang.String, jakarta.activation.DataSource)
aftersetText
; else, mail readers might not be able to resolve inline references correctly.- Parameters:
plainText
- the plain text for the messagehtmlText
- the HTML text for the message- Throws:
MessagingException
- in case of errors
-
addInline
Add an inline element to the MimeMessage, taking the content from ajakarta.activation.DataSource
.Note that the InputStream returned by the DataSource implementation needs to be a fresh one on each call, as JavaMail will invoke
getInputStream()
multiple times.NOTE: Invoke
addInline
aftersetText(java.lang.String)
; else, mail readers might not be able to resolve inline references correctly.- Parameters:
contentId
- the content ID to use. Will end up as "Content-ID" header in the body part, surrounded by angle brackets: for example, "myId" → "<myId>". Can be referenced in HTML source via src="cid:myId" expressions.dataSource
- thejakarta.activation.DataSource
to take the content from, determining the InputStream and the content type- Throws:
MessagingException
- in case of errors- See Also:
-
addInline
public void addInline(String contentId, @Nullable String inlineFilename, DataSource dataSource) throws MessagingException Add an inline element to the MimeMessage, taking the content from ajakarta.activation.DataSource
and assigning the providedinlineFileName
to the element.Note that the InputStream returned by the DataSource implementation needs to be a fresh one on each call, as JavaMail will invoke
getInputStream()
multiple times.NOTE: Invoke
addInline
aftersetText(java.lang.String)
; else, mail readers might not be able to resolve inline references correctly.- Parameters:
contentId
- the content ID to use. Will end up as "Content-ID" header in the body part, surrounded by angle brackets: for example, "myId" → "<myId>". Can be referenced in HTML source via src="cid:myId" expressions.inlineFilename
- the fileName to use for the inline element's partdataSource
- thejakarta.activation.DataSource
to take the content from, determining the InputStream and the content type- Throws:
MessagingException
- in case of errors- Since:
- 6.2
- See Also:
-
addInline
Add an inline element to the MimeMessage, taking the content from ajava.io.File
.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)!
NOTE: Invoke
addInline
aftersetText(java.lang.String)
; else, mail readers might not be able to resolve inline references correctly.- Parameters:
contentId
- the content ID to use. Will end up as "Content-ID" header in the body part, surrounded by angle brackets: for example, "myId" → "<myId>". Can be referenced in HTML source via src="cid:myId" expressions.file
- the File resource to take the content from- Throws:
MessagingException
- in case of errors- See Also:
-
addInline
Add an inline element to the MimeMessage, taking the content from aorg.springframework.core.io.Resource
.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)!
Note that the InputStream returned by the Resource implementation needs to be a fresh one on each call, as JavaMail will invoke
getInputStream()
multiple times.NOTE: Invoke
addInline
aftersetText(java.lang.String)
; else, mail readers might not be able to resolve inline references correctly.- Parameters:
contentId
- the content ID to use. Will end up as "Content-ID" header in the body part, surrounded by angle brackets: for example, "myId" → "<myId>". Can be referenced in HTML source via src="cid:myId" expressions.resource
- the resource to take the content from- Throws:
MessagingException
- in case of errors- See Also:
-
addInline
public void addInline(String contentId, InputStreamSource inputStreamSource, String contentType) throws MessagingException Add an inline element to the MimeMessage, taking the content from anorg.springframework.core.InputStreamResource
, and specifying the content type explicitly.You can determine the content type for any given filename via a Java Activation Framework's FileTypeMap, for example the one held by this helper.
Note that the InputStream returned by the InputStreamSource implementation needs to be a fresh one on each call, as JavaMail will invoke
getInputStream()
multiple times.NOTE: Invoke
addInline
aftersetText
; else, mail readers might not be able to resolve inline references correctly.- Parameters:
contentId
- the content ID to use. Will end up as "Content-ID" header in the body part, surrounded by angle brackets: for example, "myId" → "<myId>". Can be referenced in HTML source via src="cid:myId" expressions.inputStreamSource
- the resource to take the content fromcontentType
- the content type to use for the element- Throws:
MessagingException
- in case of errors- See Also:
-
addInline
public void addInline(String contentId, String inlineFilename, InputStreamSource inputStreamSource) throws MessagingException Add an inline element to the MimeMessage, taking the content from anorg.springframework.core.InputStreamResource
, and specifying the inline fileName explicitly.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)!
Note that the InputStream returned by the InputStreamSource implementation needs to be a fresh one on each call, as JavaMail will invoke
getInputStream()
multiple times.NOTE: Invoke
addInline
aftersetText
; else, mail readers might not be able to resolve inline references correctly.- Parameters:
contentId
- the content ID to use. Will end up as "Content-ID" header in the body part, surrounded by angle brackets: for example, "myId" → "<myId>". Can be referenced in HTML source via src="cid:myId" expressions.inlineFilename
- the file name to use for the inline elementinputStreamSource
- the resource to take the content from- Throws:
MessagingException
- in case of errors- Since:
- 6.2
- See Also:
-
addInline
public void addInline(String contentId, String inlineFilename, InputStreamSource inputStreamSource, String contentType) throws MessagingException Add an inline element to the MimeMessage, taking the content from anorg.springframework.core.InputStreamResource
, and specifying the inline fileName and content type explicitly.You can determine the content type for any given filename via a Java Activation Framework's FileTypeMap, for example the one held by this helper.
Note that the InputStream returned by the InputStreamSource implementation needs to be a fresh one on each call, as JavaMail will invoke
getInputStream()
multiple times.NOTE: Invoke
addInline
aftersetText
; else, mail readers might not be able to resolve inline references correctly.- Parameters:
contentId
- the content ID to use. Will end up as "Content-ID" header in the body part, surrounded by angle brackets: for example, "myId" → "<myId>". Can be referenced in HTML source via src="cid:myId" expressions.inlineFilename
- the fileName to use for the inline element's partinputStreamSource
- the resource to take the content fromcontentType
- the content type to use for the element- Throws:
MessagingException
- in case of errors- Since:
- 6.2
- See Also:
-
addAttachment
public void addAttachment(String attachmentFilename, DataSource dataSource) throws MessagingException Add an attachment to the MimeMessage, taking the content from ajakarta.activation.DataSource
.Note that the InputStream returned by the DataSource implementation needs to be a fresh one on each call, as JavaMail will invoke
getInputStream()
multiple times.- Parameters:
attachmentFilename
- the name of the attachment as it will appear in the mail (the content type will be determined by this)dataSource
- thejakarta.activation.DataSource
to take the content from, determining the InputStream and the content type- Throws:
MessagingException
- in case of errors- See Also:
-
addAttachment
Add an attachment to the MimeMessage, taking the content from ajava.io.File
.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)!
- Parameters:
attachmentFilename
- the name of the attachment as it will appear in the mailfile
- the File resource to take the content from- Throws:
MessagingException
- in case of errors- See Also:
-
addAttachment
public void addAttachment(String attachmentFilename, InputStreamSource inputStreamSource) throws MessagingException Add an attachment to the MimeMessage, taking the content from anorg.springframework.core.io.InputStreamResource
.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.
Note that the InputStream returned by the InputStreamSource implementation needs to be a fresh one on each call, as JavaMail will invoke
getInputStream()
multiple times.- Parameters:
attachmentFilename
- the name of the attachment as it will appear in the mailinputStreamSource
- 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 Also:
-
addAttachment
public void addAttachment(String attachmentFilename, InputStreamSource inputStreamSource, String contentType) throws MessagingException Add an attachment to the MimeMessage, taking the content from anorg.springframework.core.io.InputStreamResource
.Note that the InputStream returned by the InputStreamSource implementation needs to be a fresh one on each call, as JavaMail will invoke
getInputStream()
multiple times.- Parameters:
attachmentFilename
- the name of the attachment as it will appear in the mailinputStreamSource
- the resource to take the content from (all of Spring's Resource implementations can be passed in here)contentType
- the content type to use for the element- Throws:
MessagingException
- in case of errors- See Also:
-
createDataSource
protected DataSource createDataSource(InputStreamSource inputStreamSource, String contentType, String name) Create an Activation Framework DataSource for the given InputStreamSource.- Parameters:
inputStreamSource
- the InputStreamSource (typically a Spring Resource)contentType
- the content typename
- the name of the DataSource- Returns:
- the Activation Framework DataSource
-