James+java开源项目(1)

本文介绍了如何利用Apache James搭建邮件服务器,包括启动James、管理用户,以及结合Javamail进行邮件的收发功能。通过James 2.3.1和Javamail 1.4.1,读者可以学习到邮件服务器的基本配置与邮件客户端的实现。
摘要由CSDN通过智能技术生成
邮件发送

@Service
public class SendMailServiceImpl implements SendMailService {

// 初始化参数
private Properties prop;
// 发件人
private InternetAddress sendMan;
// 绑定邮箱信息
private BindMail bindMail;
// 绑定邮箱实体DAO
@Resource
private BindMailDao bindMailDao;
// 绑定邮箱信息
private MailMessage mailMessage;
@Resource
private ViewMailService viewMailService;
@Resource
private FilesManagerDao filesManagerDao;


@Override
public String sendMail(MailMessage mailMessage) throws Exception {
// 设置初始信息.
setMailMessage(mailMessage);
getBindMailInfoByUsername(getMailMessage().getSender());//173行函数 获取绑定邮箱 
if (getBindMail() == null) {
return "error";
}
//配置服务器属性  
setMailDebug("ture");// 189行函数 测试使用 上线时设置为false 
setProperties();//199行 设置收件协议及地址
setInternetAddress();//212行 设置发件网络地址
// 1. 创建邮件会话并验证用户信息  smtp认证,获取Session     
SmtpAuthServiceImpl smtpAuth = new SmtpAuthServiceImpl();
smtpAuth.setUserinfo(getBindMail().getMailUsername(), getBindMail()
.getMailPassword());
Session session = Session.getInstance(getProp(), smtpAuth);
session.setPasswordAuthentication(new URLName(getBindMail()
.getTransportHost()), smtpAuth.getPasswordAuthentication());
// 2. 创建邮件对象 java自带api 构建邮件体   
MimeMessage message = new MimeMessage(session);
// 3. 设置参数:标题、发件人、收件人、发送时间、内容
message.setSubject(getMailMessage().getSubject());
message.setSender(getSendMan());
InternetAddress addressFrom = new InternetAddress(getMailMessage().getSender()); // 设置发信人地址
message.setFrom(addressFrom);
List internetAddresss = new ArrayList();//收件地址
String []Recips = getMailMessage()
.getRecipients().split(";");
if(Recips!=null&& Recips.length>0){
for(int i=0;i
System.out.println("接收人:"+Recips[i].toString());
InternetAddress ia = new InternetAddress(Recips[i]);
ia.validate();// 验证
internetAddresss.add(ia);
}
}else{
return "error";
}
message.setRecipients(RecipientType.TO, (InternetAddress[])internetAddresss.toArray(new InternetAddress[internetAddresss.size()]));
message.setSentDate(new Date());

//4.带附件(图片)邮件开发
// 构建一个总的邮件块
MimeMultipart mixed = new MimeMultipart("mixed");
// ---> 总邮件快,设置到邮件对象中
message.setContent(mixed);
// 右侧: 附件

// right = createAttachMent("F:/Java/Software/环境搭建.docx");
// right = createAttachMent(getMailMessage().getAttachments());
if (getMailMessage().getAttachIds() != null
&& !"".equals(getMailMessage().getAttachIds())) {
String[] AttachIds = getMailMessage().getAttachIds().split(",");
for (String AttachId : AttachIds) {//遍历附件id获取附件体
mixed.addBodyPart(createAttachMent(filesManagerDao
.getFilesManagerByattachId(Long.parseLong(AttachId))));
}
}
// 左侧: (文本+图片资源)
MimeBodyPart left = new MimeBodyPart();
left.setContent(createContentAndPic(mailMessage.getContent(),
mailMessage.getEmbeddedImages()));
// 设置到总邮件块
mixed.addBodyPart(left);

// 5. 发送邮件
Transport trans = session.getTransport();
// System.out.println(getBindMail().getMailUsername());
// System.out.println(getBindMail().getMailPassword());
trans.connect(getBindMail().getMailUsername(), getBindMail()
.getMailPassword());
trans.sendMessage(message, message.getAllRecipients());
trans.close();
mailMessage.setFlags(MailMessageDao.SENT);
viewMailService.saveOrUpdateMail(mailMessage);
return "success";
}
private void getBindMailInfoByUsername(String username) {
List lBindMail = this.bindMailDao
.FindBindMailByUsername(username);
if (lBindMail.size() > 0) {
setBindMail(lBindMail.get(0));
} else {
setBindMail(null);
}
}

private void setMailDebug(String isDebug) {
getProp().put("mail.debug", isDebug); // 调试模式
}

private void setProperties() {
getProp().put("mail.transport.protocol",
getBindMail().getTransportProtocol()); // 指定协议
getProp().put("mail.smtp.host", getBindMail().getTransportHost()); // 主机
// stmp.qq.com
getProp().put("mail.smtp.port", getBindMail().getTransportPort()); // 端口
getProp().put("mail.smtp.auth", getBindMail().getMailAuth()); // 用户密码认证

}

private void setInternetAddress() {
try {
setSendMan(new InternetAddress(getBindMail().getMailUsername()));
} catch (AddressException e) {
throw new RuntimeException(e);
}
}

public static MimeBodyPart createAttachMent(FilesManager filesManager)
throws MessagingException, UnsupportedEncodingException {
if(filesManager == null){
return null;
}
MimeBodyPart mimeBodyPart = new MimeBodyPart();
String realPath = ServletActionContext.getRequest().getSession().getServletContext().getRealPath(filesManager.getFullpath());
FileDataSource dataSource = new FileDataSource(new File(realPath+"/"+filesManager.getStorageFilename()));
mimeBodyPart.setDataHandler(new DataHandler(dataSource));
mimeBodyPart.setFileName(MimeUtility.encodeText(filesManager.getShowFilename(),
"gb2312", "B"));//防止乱码
return mimeBodyPart;
}

public static MimeMultipart createContentAndPic(String content, String path)
throws MessagingException, UnsupportedEncodingException {

// 4.1 构建一个多功能邮件块
MimeMultipart related = new MimeMultipart("related");

// 4.2设置具体内容: a.资源(图片)
if (path != null && !"".equals(path)) {
String realPath = ServletActionContext.getRequest().getSession().getServletContext().getRealPath("/");
String propath = ServletActionContext
.getRequest().getContextPath();
String basePath = ServletActionContext
.getRequest().getScheme()
+ "://"
+ ServletActionContext.getRequest()
.getServerName()
+ ":"
+ ServletActionContext.getRequest()
.getServerPort()
+ propath
+ "/";
String[] PicPaths = path.split(";");
for (String PicPath : PicPaths) {
DataSource ds = new FileDataSource(PicPath.replace(basePath,  realPath.replaceAll("\\\", "/")));
//将文件html中的img src 转换为cid
String newName = UUID.randomUUID().toString()
+ PublicFunctionUtil.getFileNameExtension(ds.getName(),
".");
content = content.replaceAll(PicPath, "cid:" + newName);
MimeBodyPart resource = new MimeBodyPart();
DataHandler handler = new DataHandler(ds);
resource.setDataHandler(handler);
resource.setContentID(newName); // 设置资源名称,给外键引用
resource.setFileName(MimeUtility.encodeText(PicPath.substring(PicPath.lastIndexOf('/')+1,PicPath.length()),
"gb2312", "B"));
related.addBodyPart(resource);
}
}
// 4.3 构建多功能邮件块内容 = 左侧文本 + 右侧图片资源
MimeBodyPart contentPart = new MimeBodyPart();
related.addBodyPart(contentPart);
return related;
}


@Override
public String transpondMail(MailMessage mailMessage) {
// TODO Auto-generated method stub
return null;
}

@Override
public String replyMail(MailMessage mailMessage) {
// TODO Auto-generated method stub
return null;
}

public Properties getProp() {
if (prop == null) {
setProp(new Properties());
}
return prop;
}

public void setProp(Properties prop) {
this.prop = prop;
}

public InternetAddress getSendMan() {
i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值