关于jar包的使用 可以使用j2ee的jar包 也可以使用mail-1.4.jar 和smtp.jar 这位两者的jar
直接上代码
package email;
import java.util.Properties;import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class SendEmai {
/**
* 根据传入的 Seesion 对象创建混合型邮件
*/
public MimeMessage createMessage(Session session) throws Exception {
MimeMessage msg = new MimeMessage(session);
//发件人 地址
msg.setFrom(new InternetAddress("653766408@qq.com"));
//TO为初级收件人,CC为邮件副本抄送,BCC应该是密秘抄送吧
msg.setRecipient(Message.RecipientType.TO, new InternetAddress("653766408@qq.com"));
msg.setSubject("包含附件和显示图片的邮件");
// 将邮件中各个部分组合到一个"mixed"型的 MimeMultipart 对象
MimeMultipart allPart = new MimeMultipart("mixed");
// 创建邮件附件部分
MimeBodyPart attachmentPart = new MimeBodyPart();
FileDataSource fds = new FileDataSource("G:\\ForceCheckMD5.cfg");
attachmentPart.setDataHandler(new DataHandler(fds));
attachmentPart.setFileName(fds.getName());
// 用于组合文本和图片,"related"型的MimeMultipart对象
MimeMultipart contentMulti = new MimeMultipart("related");
// 正文的文字部分
String body = "<h4>请欣赏作品</h4> </br>"
+ "<img src = \"cid:bule_jpg\">";
MimeBodyPart textBody = new MimeBodyPart();
textBody.setContent(body, "text/html;charset=UTF-8");
contentMulti.addBodyPart(textBody);
// 正文的图片部分
MimeBodyPart jpgBody = new MimeBodyPart();
FileDataSource fds2 = new FileDataSource("G:\\Blue1.jpg");
jpgBody.setDataHandler(new DataHandler(fds2));
//此处的名字 必须和 img标签中的值一样
jpgBody.setContentID("bule_jpg");
contentMulti.addBodyPart(jpgBody);
// 邮件的正文部分 包含图片
MimeBodyPart contentBody = new MimeBodyPart();
//将上边的"related"型的MimeMultipart对象 合成一个完整的正文部分
contentBody.setContent(contentMulti);
//完整的邮件部分
allPart.addBodyPart(attachmentPart);
allPart.addBodyPart(contentBody);
// 将上面混合型的 MimeMultipart 对象作为邮件内容并保存
msg.setContent(allPart);
msg.saveChanges();
return msg;
}
// 测试生成邮件
public static void main(String[] args) throws Exception {
SendEmai sendEmai = new SendEmai();
Properties props = new Properties();
//设置 用户名 和密码
props.put("username", "653766408@qq.com");
props.put("password", "whlyww1127809");
//使用 smtp 传输协议
props.put("mail.transport.protocol", "smtp" );
props.put("mail.smtp.host", "smtp.qq.com");
props.put("mail.smtp.port", "25" );
// 网上大多数解释 设置了False 可以免认证可以发邮件 其实不是的 我们采用的smtp协议传输邮件 这是必须需要认证的
props.put("mail.smtp.auth", false);
Session session = Session.getInstance(props);
MimeMessage message = sendEmai.createMessage(session);
Transport transport = session.getTransport("smtp");
transport.connect(props.getProperty("mail.smtp.host"), props
.getProperty("username"), props.getProperty("password"));
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
}
使用QQ邮箱测试的 需要先在QQ邮箱设置中 开启POP3/SMTP服务
我使用的SMTP协议作为发送的 当我想使用POP3使用的时候 报错 网上有人说是版本缺少Jar 但是后来我添加了pop3.jar也是没用的 是不是pop3不能发邮件
请各位朋友说说
对于如何实现免认证登陆发送邮件问题
我 上面说了 使用stmp协议是肯定需要 认证的 不是简单设置一个属性就可以 但是这也留下一个问题
1:那就是既然不能跳过“认证”这个这个过程。那为什么有这样的属性让我们可以去设置?
2 :对于免认证 是不是可以通过POP3来实现 因为我在网上查看了下都是使用POP3来作为接受邮件的 POP3是否可以发邮件? 如何使用?