1.邮件
1.1 邮件组成部分
1.2 发送邮件(带附件、正文带图片)
QQ邮箱为例: 需要QQ账号和QQ登录第三方客户端时,密码框的“授权码”(相当于密码)
授权码如下获取:
代码如下:
public class JavaMailboxAttachment {
private MimeMessage message;
private Session session;
private String mailHost = "";
private String mailAuth = "";
private String mailPort = "";
private String sender_username = "";
private String sender_password = "";
//定义一个Properties 用于存放信息
private Properties properties = new Properties();
//-------------------------------发信箱---------------------------------------------
public JavaMailboxAttachment(String email_type) {
try {
properties.put("mail.smtp.host","smtp.qq"); //发送邮件服务器
//端口号,QQ邮箱给出了两个端口,但是另一个我一直使用不了,所以就给出这一个587
properties.put("mail.smtp.port", "587"); //发送邮件端口号
properties.put("mail.smtp.auth", "true");
// 此处填写你的账号
properties.put("mail.user", "xxxxxxxxx@qq");
// 此处的密码就是前面说的16位STMP授权码
properties.put("mail.password", "xxxxxxxxxxxxxxxx");
this.mailHost = Property("mail.smtp.host");
this.mailAuth = Property("mail.smtp.auth");
this.mailPort = Property("mail.smtp.port");
this.sender_username = Property("mail.user");
this.sender_password = Property("mail.password");
} catch (Exception e) {
e.printStackTrace();
}
// 构建授权信息,用于进行SMTP进行身份验证
Authenticator authenticator = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
// 用户名、密码
String userName = Property("mail.user");
String password = Property("mail.password");
return new PasswordAuthentication(userName, password);
}
};
session = Instance(properties,authenticator); //用户验证
message = new MimeMessage(session); //将验证成功的session信息,创建一个message 对象。
}
/**
* 发送邮件
* @param subject
* 邮件主题
* @param sendHtml
* 邮件内容
* @param receiveUser
* 收件人地址
* @param file
* 附件
*/
public int doSendHtmlEmail(String subject, String sendHtml, String receiveUser, Vector file) {
try {
// 发件人
InternetAddress from = new InternetAddress(sender_username);
message.setFrom(from);
// 收件人
InternetAddress to = new InternetAddress(receiveUser);
message.setRecipient(Message.RecipientType.TO, to);
// 邮件主题
message.setSubject(subject);
// 向multipart对象中添加邮件的各个部分内容,包括文本内容带图片和附件
BodyPart contentPart = new MimeBodyPart();
Multipart multipart = new MimeMultipart("related"); //用于来关联文本内容中图片。
// 添加邮件正文
String imgaeString=Qh_method.randNumID("qunhong_"); //生成一个随机数,
大家可以自己写
multipart.addBodyPart(contentPart);
//利用正则出图片中的src改成cid
final Pattern imgRegExp = Patternpile( "<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>" );
Map<String, String> inlineImage = new HashMap<String, String>();
final Matcher matcher = imgRegExp.matcher( sendHtml );
int i = 0;
while ( matcher.find() ) {
String src = up();
if ( sendHtml.indexOf( src ) != -1 ) {
String srcToken = "src=\"";
int x = src.indexOf( srcToken );
int y = src.indexOf( "\"", x + srcToken.length() );
String srcText = src.substring( x + srcToken.length(), y );
String Sub = srcText.substring(srcText.indexOf("."),srcText.length());
String cid = imgaeString + i;
String newSrc = place( srcText, "cid:" + cid +Sub);
inlineImage.put( cid, srcText.split( "," )[0] );
sendHtml = place( src, newSrc );
i++;
qq怎么发邮件 }
}
//这里说明一下为什么要将正文里的图片转为cid,个人理解:附件和正文里的图片都归于附件传输,设置cid用于识别附件是否为正文底下图片。
//修改后正文内容放置contentPart
contentPart.setContent(sendHtml, "text/html;charset=UTF-8");
//获取项目路径,来获得正文底下的图片,上传至服务器。
String path = Class().getProtectionDomain().getCodeSource().getLocation().getFile();
发布评论