有發(fā)送人名稱中文支持,支持bytes格式附件,附件中文支持
? public static boolean send(String fromName, String fromAddr, String to, String subject, String
???????????????????????????? body, String fileName, byte[] file) throws
????? Exception {
??????? //發(fā)送人名稱,用base64編碼,再加上特殊標(biāo)志
??????? fromName = "=?GB2312?B?" + new String(base64.encode((fromName).getBytes()))? + "?=";
??? Properties props = new Properties();
??? Session session = Session.getInstance(props, null);
??? props.put("mail.smtp.host", Constants.mailhost);
??? props.put("mail.smtp.auth", "false");?
??? Message msg = new MimeMessage(session);
????? msg.setFrom(new InternetAddress(fromAddr,fromName));
//后面的BodyPart將加入到此處創(chuàng)建的Multipart中
??? Multipart mp = new MimeMultipart();
// Create the message part
??? BodyPart messageBodyPart = new MimeBodyPart();
??? // Fill the message
??? messageBodyPart.setText(body);
??? mp.addBodyPart(messageBodyPart);
????? /*發(fā)送附件*/
???? if (file != null && file.length > 0) {
?????? //利用枚舉器方便的遍歷集合
???????? MimeBodyPart mbp = new MimeBodyPart();?
//???????? File fileTmp = null;
???????? //得到數(shù)據(jù)源
//???????? FileDataSource fds = new FileDataSource(fileTmp);
???????? //得到附件本身并至入BodyPart
???????? mbp.setDataHandler(new DataHandler(new ByteArrayDataSource(file,"application/octet-stream")));
???????? //得到文件名同樣至入BodyPart
???????? mbp.setFileName(MimeUtility.encodeWord(fileName,"GB2312",null));
???????? mp.addBodyPart(mbp);
???? }
???
??? //Multipart加入到信件
??? msg.setContent(mp);
??? msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
??? msg.setSubject(subject);
??? msg.setHeader("X-Mailer", "personal Email Sender");
??? msg.setSentDate(new Date());
??? Transport transport = session.getTransport("smtp");
??? //添加認(rèn)證信息
??? transport.connect(Constants.mailhost, Constants.user, Constants.pwd);
??? transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO));
??? transport.close();
??? return true;
? }
import java.io.*;
import javax.activation.*;
public class ByteArrayDataSource implements DataSource {
??? /** * Data to write. */
??? private byte[] _data;
??? /** * Content-Type. */
??? private String _type;
??? /* Create a datasource from an input stream */
??? public ByteArrayDataSource(InputStream is, String type) {
??????? _type = type;
??????? try {
??????????? ByteArrayOutputStream os = new ByteArrayOutputStream();
??????????? int ch;
??????????? // XXX : must be made more efficient by
??????????? // doing buffered reads, rather than one byte reads
??????????? while ((ch = is.read()) != -1)
??????????????? os.write(ch);
??????????? _data = os.toByteArray();
??????? } catch (IOException ioe) {
??????? }
??? }
??? /* Create a datasource from a byte array */
??? public ByteArrayDataSource(byte[] data, String type) {
??????? _data = data;
??????? _type = type;
??? }
??? /* Create a datasource from a String */
??? public ByteArrayDataSource(String data, String type) {
??????? try {
??????????? // Assumption that the string contains only ascii
??????????? // characters ! Else just pass in a charset into this
??????????? // constructor and use it in getBytes()
??????????? _data = data.getBytes("iso-8859-1");
??????? } catch (UnsupportedEncodingException uee) {
??????? }
??????? _type = type;
??? }
??? public InputStream getInputStream() throws IOException {
??????? if (_data == null)
??????????? throw new IOException("no data");
??????? return new ByteArrayInputStream(_data);
??? }
??? public OutputStream getOutputStream() throws IOException {
??????? throw new IOException("cannot do this");
??? }
??? public String getContentType() {
??????? return _type;
??? }
??? public String getName() {
??????? return "dummy";
??? }
}
posted on 2006-05-10 18:02
小鐵匠 閱讀(642)
評論(1) 編輯 收藏 所屬分類:
java