GroupDocs.Assembly for Java enables you to generate email messages dynamically from templates. You can set email attributes like subject, body, and recipients (To, CC, BCC) using template syntax, making it easy to create personalized email messages from data sources.
In your email template (EmailTemplate.msg), set attributes and body:
Subject field:
<<[email.getSubject()]>>
To field:
<<[email.getRecipient()]>>
Body:
Dear <<[email.getCustomerName()]>>,
Please find your invoice below:
Amount: <<[email.getInvoiceAmount()]:"$#,##0.00">>
Thank you for your business.
Note
Number and date format strings follow Java conventions (java.text.DecimalFormat and java.text.SimpleDateFormat patterns). The .NET-specific "C" currency format is not supported; use a pattern such as "$#,##0.00" instead.
Generate Email with Multiple Recipients
Set multiple recipients using foreach:
importcom.groupdocs.assembly.*;importjava.util.*;publicclassMultiRecipientEmailData{privateList<String>recipients;privateStringsubject;privateStringmessage;publicList<String>getRecipients(){returnrecipients;}publicvoidsetRecipients(List<String>value){this.recipients=value;}publicStringgetSubject(){returnsubject;}publicvoidsetSubject(Stringvalue){this.subject=value;}publicStringgetMessage(){returnmessage;}publicvoidsetMessage(Stringvalue){this.message=value;}}publicstaticvoidgenerateEmailWithMultipleRecipients()throwsException{MultiRecipientEmailDataemailData=newMultiRecipientEmailData();emailData.setRecipients(Arrays.asList("recipient1@example.com","recipient2@example.com"));emailData.setSubject("Important Update");emailData.setMessage("This is an important message for all recipients.");DocumentAssemblerassembler=newDocumentAssembler();assembler.assembleDocument("EmailTemplate.msg","EmailOutput.msg",newDataSourceInfo(emailData,"email"));System.out.println("Email with multiple recipients generated successfully.");}
Template for multiple recipients:
To field:
<<foreach [r in email.getRecipients()]>><<[r]>>; <</foreach>>
Body:
<<[email.getMessage()]>>
Generate Email with CC and BCC
Set CC and BCC recipients:
importcom.groupdocs.assembly.*;publicclassCcBccEmailData{privateStringto;privateStringcc;privateStringbcc;privateStringsubject;privateStringbody;publicStringgetTo(){returnto;}publicvoidsetTo(Stringvalue){this.to=value;}publicStringgetCc(){returncc;}publicvoidsetCc(Stringvalue){this.cc=value;}publicStringgetBcc(){returnbcc;}publicvoidsetBcc(Stringvalue){this.bcc=value;}publicStringgetSubject(){returnsubject;}publicvoidsetSubject(Stringvalue){this.subject=value;}publicStringgetBody(){returnbody;}publicvoidsetBody(Stringvalue){this.body=value;}}publicstaticvoidgenerateEmailWithCcBcc()throwsException{CcBccEmailDataemailData=newCcBccEmailData();emailData.setTo("customer@example.com");emailData.setCc("manager@example.com");emailData.setBcc("archive@example.com");emailData.setSubject("Invoice");emailData.setBody("Please find attached invoice.");DocumentAssemblerassembler=newDocumentAssembler();assembler.assembleDocument("EmailTemplate.msg","EmailOutput.msg",newDataSourceInfo(emailData,"email"));System.out.println("Email with CC and BCC generated successfully.");}
Template:
To field:
<<[email.getTo()]>>
CC field:
<<[email.getCc()]>>
BCC field:
<<[email.getBcc()]>>
Body:
<<[email.getBody()]>>
Generate Email with Rich Content
Create emails with tables, lists, and formatted content:
Dear <<[order.getCustomerName()]>>,
Thank you for your order. Here are your items:
<<foreach [in order.getItems()]>>
• <<[getProductName()]>> - <<[getPrice()]:"$#,##0.00">>
<</foreach>>
Total: <<[order.getItems().sum(i => i.getPrice())]:"$#,##0.00">>
Generate Email from Collection
Generate multiple emails from a collection:
importcom.groupdocs.assembly.*;importjava.util.*;publicclassCustomerEmail{privateStringemail;privateStringname;privateStringsubject;publicCustomerEmail(Stringemail,Stringname,Stringsubject){this.email=email;this.name=name;this.subject=subject;}publicStringgetEmail(){returnemail;}publicStringgetName(){returnname;}publicStringgetSubject(){returnsubject;}}publicstaticvoidgenerateEmailsFromCollection()throwsException{List<CustomerEmail>customers=Arrays.asList(newCustomerEmail("customer1@example.com","John Doe","Personalized Message"),newCustomerEmail("customer2@example.com","Jane Smith","Personalized Message"));// Generate email for each customer
DocumentAssemblerassembler=newDocumentAssembler();for(CustomerEmailcustomer:customers){StringoutputPath="Email_"+customer.getName().replace(" ","_")+".msg";assembler.assembleDocument("EmailTemplate.msg",outputPath,newDataSourceInfo(customer,"customer"));}System.out.println("Emails generated from collection successfully.");}
Set Email From Address
Set the sender (From) address:
importcom.groupdocs.assembly.*;publicclassSenderEmailData{privateStringfrom;privateStringto;privateStringsubject;publicStringgetFrom(){returnfrom;}publicvoidsetFrom(Stringvalue){this.from=value;}publicStringgetTo(){returnto;}publicvoidsetTo(Stringvalue){this.to=value;}publicStringgetSubject(){returnsubject;}publicvoidsetSubject(Stringvalue){this.subject=value;}}publicstaticvoidgenerateEmailWithFrom()throwsException{SenderEmailDataemailData=newSenderEmailData();emailData.setFrom("sender@example.com");emailData.setTo("recipient@example.com");emailData.setSubject("Test Email");DocumentAssemblerassembler=newDocumentAssembler();assembler.assembleDocument("EmailTemplate.msg","EmailOutput.msg",newDataSourceInfo(emailData,"email"));System.out.println("Email with From address generated successfully.");}
Template:
From field:
<<[email.getFrom()]>>
Warning
Email templates must be in MSG, EML, EMLX, or MHTML format. The template structure depends on the email client used to create it. Ensure proper formatting for HTML or RTF email bodies. The output email format is determined by the output file extension, or can be set explicitly with new LoadSaveOptions(FileFormat.MSG_UNICODE) (also FileFormat.MSG_ASCII, FileFormat.EML, FileFormat.EMLX, FileFormat.MHTML).
Advanced Usage Topics
To learn more about email attachments, HTML email bodies, email headers, and advanced email generation scenarios, please refer to the advanced usage section.
More resources
GitHub Examples
You may easily run the code above and see the feature in action in our GitHub examples: