- 浏览: 42295 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
1,读入图片的方式:
发现网上讲的很多读取图片的方式都不对,按下面提供的这个方法来读取,保证成功。
java 代码
private byte [] getImageBytes(String file) {
byte [] myData = null ;
InputStream input = getClass().getClassLoader().getResourceAsStream(file);
try {
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
int ch = 0 ;
while ((ch = input.read()) != - 1 ) {
byteArray.write(ch);
}
// System.out.println(byteArray.size());
myData = byteArray.toByteArray();
// System.out.println(myData.length);
}
catch (Exception e) {
e.printStackTrace();}
return myData;
}
2,发送邮件的“机关”
java 代码
MimeMessage msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress( this .getSenderAddress()));
msg.setSubject(this .getTitle());
msg.setSentDate(new Date());
Address[] adds = InternetAddress.parse(getToAddress());
msg.addRecipients(javax.mail.Message.RecipientType.TO, adds);
// 新建一个MimeMultipart对象用来存放BodyPart对象(事实上可以存放多个)
MimeMultipart mm = new MimeMultipart( "related" );
// 新建一个存放信件内容的BodyPart对象
BodyPart mdp = new MimeBodyPart();
// 给BodyPart对象设置内容和格式/编码方式
mdp.setContent(this .getContent(), "text/html;charset=utf-8" );
// 这句很重要,千万不要忘了
mm.addBodyPart(mdp);
// ---------图片处理开始!!!!!!!!!!!!!!!!
mdp = new MimeBodyPart();
byte bbb[] = new byte [ 1024 * 10 ];
this .getClass().getClassLoader().getResourceAsStream( "notice.jpg" ).read(bbb);
DataHandler dh = new DataHandler( new ByteArrayDataSource( this .getImageBytes( "notice.jpg" ), "application/octet-stream" ));
mdp.setDataHandler(dh);
// 加上这句将作为附件发送,否则将作为信件的文本内容
mdp.setFileName("1.jpg" );
mdp.setHeader("content-id" , "<IMG1>" );
// 将含有附件的BodyPart加入到MimeMultipart对象中
mm.addBodyPart(mdp);
// 把mm作为消息对象的内容
msg.setContent(mm);
3,一个实际应用的完整代码
要求根据一个格式文件和模版,发一封漂亮的邮件,所以需要用到HTML格式来发送邮件。不多说了,看代码吧!
java 代码
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.util.ByteArrayDataSource;
/** */ /**
*
* @author robin
* @version $Revision: 1.4 $
*/
public class SendMailUtil {
private String mailServerAddress;
private String user;
private String password;
private String toAddress;
private String ccAddress;
private String title;
private String content;
private boolean isHtml = true ;
private Map attachmentFiles = null ;
private String senderAddress;
private byte [] getImageBytes(String file) {
byte [] myData = null ;
InputStream input = getClass().getClassLoader().getResourceAsStream(file);
try {
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
int ch = 0 ;
while ((ch = input.read()) != - 1 ) {
byteArray.write(ch);
}
// System.out.println(byteArray.size());
myData = byteArray.toByteArray();
// System.out.println(myData.length);
} catch (Exception e) {
e.printStackTrace();
}
return myData;
}
public void sendMail() throws Exception {
Properties pos = new Properties();
pos.put("mail.smtp.host" , "10.5.1.1" );
javax.mail.Session mailSession = javax.mail.Session.getInstance(pos,null );
MimeMessage msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress( this .getSenderAddress()));
msg.setSubject(this .getTitle());
msg.setSentDate(new Date());
Address[] adds = InternetAddress.parse(getToAddress());
msg.addRecipients(javax.mail.Message.RecipientType.TO, adds);
// 新建一个MimeMultipart对象用来存放BodyPart对象(事实上可以存放多个)
MimeMultipart mm = new MimeMultipart( "related" );
// 新建一个存放信件内容的BodyPart对象
BodyPart mdp = new MimeBodyPart();
// 给BodyPart对象设置内容和格式/编码方式
mdp.setContent(this .getContent(), "text/html;charset=utf-8" );
// 这句很重要,千万不要忘了
mm.addBodyPart(mdp);
// ---------图片处理开始!!!!!!!!!!!!!!!!
mdp = new MimeBodyPart();
byte bbb[] = new byte [ 1024 * 10 ];
this .getClass().getClassLoader().getResourceAsStream( "notice.jpg" ).read(bbb);
DataHandler dh = new DataHandler( new ByteArrayDataSource( this .getImageBytes( "notice.jpg" ), "application/octet-stream" ));
mdp.setDataHandler(dh);
// 加上这句将作为附件发送,否则将作为信件的文本内容
mdp.setFileName("1.jpg" );
mdp.setHeader("content-id" , "<IMG1>" );
// 将含有附件的BodyPart加入到MimeMultipart对象中
mm.addBodyPart(mdp);
// ---------图片处理结束!!!!!!!!!!!!!!!!
// 把mm作为消息对象的内容
msg.setContent(mm);
msg.saveChanges();
javax.mail.Transport transport = mailSession.getTransport("smtp" );
transport.connect();
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
}
public String getCcAddress() {
return ccAddress;
}
public String getContent() {
if (content == null ) {
return "" ;
} else {
return content;
}
}
public String getMailServerAddress() {
return "10.5.1.1" ;
}
public String getUser() {
if (user == null || user.equals( "" )) {
user = "" ;
}
return user;
}
public String getPassword() {
if (password == null || password.equals( "" )) {
password = "" ;
}
return password;
}
public String getTitle() {
if (title == null ) {
return "" ;
} else {
return title;
}
}
public String getToAddress() {
return toAddress;
}
public boolean isHtml() {
return isHtml;
}
public void setCcAddress(String ccAddress) {
this .ccAddress = ccAddress;
}
public void setContent(String content) {
this .content = content;
}
public void setMailServerAddress(String mailServerAddress) {
this .mailServerAddress = mailServerAddress;
}
public void setUser(String user) {
this .user = user;
}
public void setPassword(String password) {
this .password = password;
}
public void setTitle(String title) {
this .title = title;
}
public void setToAddress(String toAddress) {
this .toAddress = toAddress;
}
public void setIsHtml( boolean isHtml) {
this .isHtml = isHtml;
}
public void setAttachmentFiles(Map attachmentFiles) {
this .attachmentFiles = attachmentFiles;
}
public Map getAttachmentFiles() {
return attachmentFiles;
}
public void setHtml( boolean isHtml) {
this .isHtml = isHtml;
}
public String getSenderAddress() {
return senderAddress;
}
public void setSenderAddress(String senderAddress) {
this .senderAddress = senderAddress;
}
public String readMailTemplate(String year, String season) throws IOException {
ClassLoader loder = this .getClass().getClassLoader();
InputStream is = loder.getResourceAsStream("t.html" );
byte [] buf = new byte [ 1024 * 5 ];
is.read(buf);
String t = new String(buf, "utf-8" );
t = t.replaceFirst("#year" , year);
t = t.replaceFirst("#season" , season);
// System.out.println(t);
return t;
}
public static void sendNoticeMail(String title, String year, String season,String sender, File f) {
SendMailUtil logic = new SendMailUtil();
try {
logic.setTitle(title);
// logic.setMailServerAddress("10.5.1.1");
String temp = logic.readMailTemplate(year, season);
logic.setSenderAddress(sender);
FileReader fr = new FileReader(f);
char [] ch = new char [ new Long(f.length()).intValue()];
fr.read(ch);
StringBuffer sb = new StringBuffer( new Long(f.length()).intValue());
for ( int i = 0 ; i < ch.length; i++) {
sb.append(ch[i]);
}
String[] all = sb.toString().split("\n" );
// System.out.println(sb.toString());
for ( int i = 0 ; i < all.length; i++) {
if (all[i].equals( "" )) {
continue ;
}
String t = temp;
String[] item = all[i].split("," );
logic.setToAddress(item[2 ]);
// 处理内容
t = t.replaceFirst("#name" , item[ 1 ] + "(" + item[ 0 ] + ")" );
t = t.replaceAll("#total" , item[ 3 ]);
t = t.replaceFirst("#tax" , item[ 4 ]);
t = t.replaceFirst("#actualTotal" , item[ 5 ]);
logic.setContent(t);
logic.sendMail();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
发现网上讲的很多读取图片的方式都不对,按下面提供的这个方法来读取,保证成功。
java 代码
private byte [] getImageBytes(String file) {
byte [] myData = null ;
InputStream input = getClass().getClassLoader().getResourceAsStream(file);
try {
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
int ch = 0 ;
while ((ch = input.read()) != - 1 ) {
byteArray.write(ch);
}
// System.out.println(byteArray.size());
myData = byteArray.toByteArray();
// System.out.println(myData.length);
}
catch (Exception e) {
e.printStackTrace();}
return myData;
}
2,发送邮件的“机关”
java 代码
MimeMessage msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress( this .getSenderAddress()));
msg.setSubject(this .getTitle());
msg.setSentDate(new Date());
Address[] adds = InternetAddress.parse(getToAddress());
msg.addRecipients(javax.mail.Message.RecipientType.TO, adds);
// 新建一个MimeMultipart对象用来存放BodyPart对象(事实上可以存放多个)
MimeMultipart mm = new MimeMultipart( "related" );
// 新建一个存放信件内容的BodyPart对象
BodyPart mdp = new MimeBodyPart();
// 给BodyPart对象设置内容和格式/编码方式
mdp.setContent(this .getContent(), "text/html;charset=utf-8" );
// 这句很重要,千万不要忘了
mm.addBodyPart(mdp);
// ---------图片处理开始!!!!!!!!!!!!!!!!
mdp = new MimeBodyPart();
byte bbb[] = new byte [ 1024 * 10 ];
this .getClass().getClassLoader().getResourceAsStream( "notice.jpg" ).read(bbb);
DataHandler dh = new DataHandler( new ByteArrayDataSource( this .getImageBytes( "notice.jpg" ), "application/octet-stream" ));
mdp.setDataHandler(dh);
// 加上这句将作为附件发送,否则将作为信件的文本内容
mdp.setFileName("1.jpg" );
mdp.setHeader("content-id" , "<IMG1>" );
// 将含有附件的BodyPart加入到MimeMultipart对象中
mm.addBodyPart(mdp);
// 把mm作为消息对象的内容
msg.setContent(mm);
3,一个实际应用的完整代码
要求根据一个格式文件和模版,发一封漂亮的邮件,所以需要用到HTML格式来发送邮件。不多说了,看代码吧!
java 代码
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.util.ByteArrayDataSource;
/** */ /**
*
* @author robin
* @version $Revision: 1.4 $
*/
public class SendMailUtil {
private String mailServerAddress;
private String user;
private String password;
private String toAddress;
private String ccAddress;
private String title;
private String content;
private boolean isHtml = true ;
private Map attachmentFiles = null ;
private String senderAddress;
private byte [] getImageBytes(String file) {
byte [] myData = null ;
InputStream input = getClass().getClassLoader().getResourceAsStream(file);
try {
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
int ch = 0 ;
while ((ch = input.read()) != - 1 ) {
byteArray.write(ch);
}
// System.out.println(byteArray.size());
myData = byteArray.toByteArray();
// System.out.println(myData.length);
} catch (Exception e) {
e.printStackTrace();
}
return myData;
}
public void sendMail() throws Exception {
Properties pos = new Properties();
pos.put("mail.smtp.host" , "10.5.1.1" );
javax.mail.Session mailSession = javax.mail.Session.getInstance(pos,null );
MimeMessage msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress( this .getSenderAddress()));
msg.setSubject(this .getTitle());
msg.setSentDate(new Date());
Address[] adds = InternetAddress.parse(getToAddress());
msg.addRecipients(javax.mail.Message.RecipientType.TO, adds);
// 新建一个MimeMultipart对象用来存放BodyPart对象(事实上可以存放多个)
MimeMultipart mm = new MimeMultipart( "related" );
// 新建一个存放信件内容的BodyPart对象
BodyPart mdp = new MimeBodyPart();
// 给BodyPart对象设置内容和格式/编码方式
mdp.setContent(this .getContent(), "text/html;charset=utf-8" );
// 这句很重要,千万不要忘了
mm.addBodyPart(mdp);
// ---------图片处理开始!!!!!!!!!!!!!!!!
mdp = new MimeBodyPart();
byte bbb[] = new byte [ 1024 * 10 ];
this .getClass().getClassLoader().getResourceAsStream( "notice.jpg" ).read(bbb);
DataHandler dh = new DataHandler( new ByteArrayDataSource( this .getImageBytes( "notice.jpg" ), "application/octet-stream" ));
mdp.setDataHandler(dh);
// 加上这句将作为附件发送,否则将作为信件的文本内容
mdp.setFileName("1.jpg" );
mdp.setHeader("content-id" , "<IMG1>" );
// 将含有附件的BodyPart加入到MimeMultipart对象中
mm.addBodyPart(mdp);
// ---------图片处理结束!!!!!!!!!!!!!!!!
// 把mm作为消息对象的内容
msg.setContent(mm);
msg.saveChanges();
javax.mail.Transport transport = mailSession.getTransport("smtp" );
transport.connect();
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
}
public String getCcAddress() {
return ccAddress;
}
public String getContent() {
if (content == null ) {
return "" ;
} else {
return content;
}
}
public String getMailServerAddress() {
return "10.5.1.1" ;
}
public String getUser() {
if (user == null || user.equals( "" )) {
user = "" ;
}
return user;
}
public String getPassword() {
if (password == null || password.equals( "" )) {
password = "" ;
}
return password;
}
public String getTitle() {
if (title == null ) {
return "" ;
} else {
return title;
}
}
public String getToAddress() {
return toAddress;
}
public boolean isHtml() {
return isHtml;
}
public void setCcAddress(String ccAddress) {
this .ccAddress = ccAddress;
}
public void setContent(String content) {
this .content = content;
}
public void setMailServerAddress(String mailServerAddress) {
this .mailServerAddress = mailServerAddress;
}
public void setUser(String user) {
this .user = user;
}
public void setPassword(String password) {
this .password = password;
}
public void setTitle(String title) {
this .title = title;
}
public void setToAddress(String toAddress) {
this .toAddress = toAddress;
}
public void setIsHtml( boolean isHtml) {
this .isHtml = isHtml;
}
public void setAttachmentFiles(Map attachmentFiles) {
this .attachmentFiles = attachmentFiles;
}
public Map getAttachmentFiles() {
return attachmentFiles;
}
public void setHtml( boolean isHtml) {
this .isHtml = isHtml;
}
public String getSenderAddress() {
return senderAddress;
}
public void setSenderAddress(String senderAddress) {
this .senderAddress = senderAddress;
}
public String readMailTemplate(String year, String season) throws IOException {
ClassLoader loder = this .getClass().getClassLoader();
InputStream is = loder.getResourceAsStream("t.html" );
byte [] buf = new byte [ 1024 * 5 ];
is.read(buf);
String t = new String(buf, "utf-8" );
t = t.replaceFirst("#year" , year);
t = t.replaceFirst("#season" , season);
// System.out.println(t);
return t;
}
public static void sendNoticeMail(String title, String year, String season,String sender, File f) {
SendMailUtil logic = new SendMailUtil();
try {
logic.setTitle(title);
// logic.setMailServerAddress("10.5.1.1");
String temp = logic.readMailTemplate(year, season);
logic.setSenderAddress(sender);
FileReader fr = new FileReader(f);
char [] ch = new char [ new Long(f.length()).intValue()];
fr.read(ch);
StringBuffer sb = new StringBuffer( new Long(f.length()).intValue());
for ( int i = 0 ; i < ch.length; i++) {
sb.append(ch[i]);
}
String[] all = sb.toString().split("\n" );
// System.out.println(sb.toString());
for ( int i = 0 ; i < all.length; i++) {
if (all[i].equals( "" )) {
continue ;
}
String t = temp;
String[] item = all[i].split("," );
logic.setToAddress(item[2 ]);
// 处理内容
t = t.replaceFirst("#name" , item[ 1 ] + "(" + item[ 0 ] + ")" );
t = t.replaceAll("#total" , item[ 3 ]);
t = t.replaceFirst("#tax" , item[ 4 ]);
t = t.replaceFirst("#actualTotal" , item[ 5 ]);
logic.setContent(t);
logic.sendMail();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
相关推荐
总结一下,Java发送带有附件的邮件涉及到JavaMail API的使用,包括配置SMTP服务器、创建邮件对象、添加内容和附件,以及发送邮件等步骤。理解这些步骤和相关类的作用是实现此功能的关键。在处理不同类型的邮件时,...
在Java编程中,发送带有附件和图片的电子邮件是一项常见的任务,尤其在自动化通知、报告分发等场景下。本文将详细讲解如何使用Java Mail API来实现这一功能,同时参考提供的`TemplateMailMessage.java`和`...
在IT领域,特别是Java开发中,使用Java Mail API发送带有图片的HTML格式邮件是一项常见且实用的功能。本文将深入解析如何利用Java Mail实现这一需求,包括必要的知识点、代码示例及其实现细节。 ### 一、Java Mail ...
在使用 Java Mail 发送邮件时,需要设置邮件的附件。Java Mail 支持多种邮件附件类型,包括文本、图像和二进制文件。下面是一个简单的示例代码: ```java public class Mail { public static void main(String[] ...
在Java编程中,发送带有Excel附件的电子邮件是一项常见的任务,特别是在数据报告或自动化流程中。在某些场景下,我们可能希望直接以流的形式处理Excel数据,而不是先将其保存为一个实际的文件,然后再作为附件发送。...
标题中的“用Java Mail发送包含图片的HTML”指的是使用JavaMail API来发送带有嵌入式图像的HTML格式电子邮件。在电子邮件中,除了纯文本内容,我们有时需要包含图像以提高信息的可读性和视觉吸引力。JavaMail API是...
5. 添加附件:如果需要发送附件,可以使用MimeBodyPart和Multipart类来创建包含附件的邮件。 6. 发送邮件:使用Transport类的send方法发送邮件。 四、添加附件的实现 1. 创建MimeBodyPart对象:为每个附件创建一个...
在Java编程语言中,发送带有附件的邮件是一个常见的任务,特别是在企业级应用或者自动化脚本中。这个场景通常涉及到SMTP(Simple Mail Transfer Protocol)服务,JavaMail API以及MIME(Multipurpose Internet Mail ...
在Java编程中,发送带有HTML格式和图片的邮件是一项常见的任务,这通常涉及到电子邮件API的使用,例如JavaMail API。以下是对这个主题的详细讲解: 首先,JavaMail API是Java平台上的一个开源库,用于处理电子邮件...
在本项目中,我们将深入探讨如何使用SpringMail发送带有附件的电子邮件。首先,我们需要了解几个核心概念: 1. **JavaMail API**: 这是Java平台上的一个标准API,用于处理邮件相关任务,如创建、发送和接收邮件。它...
如果要发送附件,可以使用`Multipart`和`BodyPart`来构建复杂的邮件结构。 ```java Multipart multipart = new MimeMultipart(); // 添加文本正文 BodyPart messageBodyPart = new MimeBodyPart(); ...
对于需要发送附件或图片的情况,可以通过构建`Multipart`对象来实现。`Multipart`允许我们将多个`BodyPart`(包括文本、图片等)组合在一起,形成一封完整的邮件。 ```java Multipart multipart = new ...
本文将详细介绍如何在Spring Boot项目中配置和使用JavaMailSender来发送带有附件的邮件。 首先,我们需要在项目的`pom.xml`或`build.gradle`文件中添加对`spring-boot-starter-mail`的依赖。对于Maven用户,可以在`...
4. **添加附件**:如果需要发送附件,可以使用MimeBodyPart和MimeMultipart类。 ```java MimeBodyPart attachmentPart = new MimeBodyPart(); attachmentPart.attachFile("path/to/your/file"); MimeMultipart ...
要使用Java Mail发送邮件,首先需要添加相应的依赖库到项目中。对于Android项目,通常会通过Gradle来引入。 1. 添加依赖: 在项目的build.gradle文件中,添加以下依赖: ```groovy dependencies { ...
这个“javamailtest带附件”可能是某个示例项目或教程,展示了如何使用JavaMail API来发送带有附件的电子邮件。下面将详细讨论JavaMail API以及如何在其中添加附件。 1. **JavaMail API基础**: JavaMail API 是...
JAVA_Mail_邮件_发送_接收_抄送_密送_附件 该资源是一个Java项目,可用Eclipse导入即可运行。 共4个类: 1:ReceiveMail.java -接收普通邮件 2:ReciveMailWithAttachMent.java --接收含有附件的邮件 3:SendMail....
本教程将深入讲解如何使用Java实现邮件发送功能,包括添加附件和向多个收件人发送邮件。 首先,我们来看`Mailer.java`,这个类通常会封装邮件发送的核心逻辑。在Java中,我们主要依赖JavaMail API来实现邮件的发送...
发送附件是通过`Multipart`对象实现的,它允许我们组合多个部分,包括文本和二进制文件。首先,创建一个`MimeBodyPart`对象来表示附件,然后将其添加到`Multipart`: ```java MimeBodyPart attachmentPart = new ...