前几天七夕情人节孤独寂寞的程序猿闲来没事,花了一两个小时写了个小Demo主要实现Java的Mail发送功能和桌面截屏功能。
首先让我们先看看Java sendMail邮件发送和桌面屏幕截屏功能是怎么实现的基础知识。
一、Java SendMail邮件发送
首先让我们来看看邮件发送的原理图:
JavaMail是一套sun提供开发邮件收发程序API,JavaMail编写程序就是邮件客户端程序(和outlook、foxmail功能类似)
*JavaMail开发需要类库javamail API ,还需要下载Java Activation Framework (jaf) ---- javamail API依赖jaf
不过在JDK6.0之后开发,只需要导入mail.jar---- rt.jar提供javax.activation开发包,但是JDK5.0
之前开发需要导入mail.jar和activation.jar
javax.mail.Message类---------代表邮件本身,可以认为用Messsage类构造一份邮件,不过开发中使用javax.mail.Session类----代表邮件。
javax.mail.Session类-----代表与服务器连接会话(简单理解连接)
JAVA MAIL邮件收发四个核心类
1、Message 邮件
2、Session连接会话
3、Transport发送邮件
4、Store 收取邮件
发送邮件编程
1、创建与邮件发送服务器连接Session(需要使用Properties类来设置配置与服务器连接的参数)
2、编写邮件内容 Message*符合邮件内容格式RFC822文档setFrom setRecipients setSubject setText
当然如果有图片或者附件那就要使用 MimeBodyPart和MimeMultipart这两个类了将几个部分组合在一起
3、使用Transport工具类 进行身份验证和发送邮件
原理和基础使用步骤讲完了就直接贴代码了
public class SendMail {
public void sendMailDemo() throws Exception {
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.host", "smtp.qq.com");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.debug", "true");
Session session = Session.getDefaultInstance(props);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));
message.addRecipients(Message.RecipientType.TO, "[email protected]");
message.setSubject("这是来自Java程序员的诚挚问候,桌面截图");
// 文本部分
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent("这是来自Java程序的诚挚问候!这是一张图片!",
"text/html;charset=UTF-8");
// 内镶嵌图片部分
MimeBodyPart imagePart = new MimeBodyPart();
// 吧磁盘上的文件读到邮件中,借助jaf框架
DataHandler dh = new DataHandler(new FileDataSource("e:\\2.jpg"));
imagePart.setDataHandler(dh);
imagePart.setContentID("image");
// 将文本部分和图片部分合体
MimeMultipart mpart = new MimeMultipart();
mpart.addBodyPart(textPart);
mpart.addBodyPart(imagePart);
mpart.setSubType("related");
message.setContent(mpart);
message.saveChanges();
Transport transport=session.getTransport("smtp");
transport.connect("[email protected]", "xxxxxxxx");
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
}
二、截屏功能实现
截屏比较简单就不一一详说了,当然我的这个截屏功能很简单,连界面神马的都没有,只是简单的截取一下当前屏幕到保存到磁盘中然后再通过send
Mail直接发到邮箱,功能很简单,代码如下:
public class ScreenShot {
public void screeShot(){
try {
//获取电脑屏幕的大小
Toolkit tk=Toolkit.getDefaultToolkit();
Dimension ds=tk.getScreenSize();
int height=(int) ds.getHeight();
int width=(int) ds.getWidth();
//拷贝屏幕到一个BufferedImage对象bi中
Robot robot = new Robot();
BufferedImage bi=robot.createScreenCapture(new Rectangle(width, height));
//将bi对象写入图像文件中,并保存到磁盘上
ImageIO.write(bi, "jpg",new File("E:\\2.jpg"));
} catch (IOException e) {
e.printStackTrace();
} catch (AWTException e) {
e.printStackTrace();
}
}
}