结合barcode4j生成条形码 并图片以附件的方式发送出去
见以下代码:
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.annotation.Resource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import javax.mail.util.ByteArrayDataSource;
import org.krysalis.barcode4j.impl.code39.Code39Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv;
public void sendEmailModel() {
Session m_SmtpSession;
String m_SmtpHost = null;
String m_SmtpUsername = null;
String m_SmtpPassword = null;
Properties props = new Properties();
// 设置mail服务器
props.put("mail.smtp.host", m_SmtpHost);
props.put("mail.smtp.auth", "true");
// Get session
m_SmtpSession = Session.getDefaultInstance(props);
// watch the mail commands go by to the mail server
m_SmtpSession.setDebug(false);
try {
// Create the barcode bean 条形码生成
Code39Bean bean = new Code39Bean();
final int dpi = 150;
// Configure the barcode generator
bean.setModuleWidth(UnitConv.in2mm(1.0f / dpi));
// makes the narrow bar width exactly one pixel
bean.setWideFactor(3);
bean.doQuietZone(false);
ByteArrayOutputStream out = new ByteArrayOutputStream();
BitmapCanvasProvider canvas = new BitmapCanvasProvider(out, "image/jpeg", dpi,
BufferedImage.TYPE_BYTE_BINARY, true, 0);
// Generate the barcode
bean.generateBarcode(canvas, "条形源码");
// Signal end of generation
canvas.finish();
// 邮件生成
MimeMessage msg = new MimeMessage(m_SmtpSession);
// 发送源
msg.setFrom(new InternetAddress("xxx@163.com"));
// 此处可以发送多个地址
InternetAddress[] tos = new InternetAddress[1];
tos[0] = new InternetAddress("to@163.com");
msg.addRecipients(Message.RecipientType.TO, tos);
msg.setSubject("主题", "utf-8");
// 使用Multipart发送邮件
Multipart multipart = new MimeMultipart();
// 正文内容
MimeBodyPart part = new MimeBodyPart();
part.setContent("正文如下:<br/>条形码如下:<br/><img src='cid:barcode.jpg'/>",
"text/html; charset=utf-8");
multipart.addBodyPart(part);
// 附件
part = new MimeBodyPart();
ByteArrayDataSource ds = new ByteArrayDataSource(out.toByteArray(),
"application/octet-stream");
out.close();// 关闭流
// 加入附件
part.setDataHandler(new DataHandler(ds));
// setHeader 目的是 可以在源码中使用barcode.jpg图片 ,如下: src='cid:barcode.jpg'
part.setHeader("Content-ID", "barcode.jpg");
ds.setName("barcode.jpg");
part.setFileName(MimeUtility.encodeText(ds.getName()));
multipart.addBodyPart(part);
msg.setContent(multipart);
msg.saveChanges();
Transport transport;
// 协议 protocol
transport = m_SmtpSession.getTransport("smtp");
transport.connect(m_SmtpHost, m_SmtpUsername, m_SmtpPassword);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
} catch (IOException e) {
e.printStackTrace();
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
barcode4j.jar 见附件!