隨筆-17  評論-6  文章-1  trackbacks-0

          有發送人名稱中文支持,支持bytes格式附件,附件中文支持

          ? public static boolean send(String fromName, String fromAddr, String to, String subject, String
          ???????????????????????????? body, String fileName, byte[] file) throws
          ????? Exception {
          ??????? //發送人名稱,用base64編碼,再加上特殊標志
          ??????? 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將加入到此處創建的Multipart中
          ??? Multipart mp = new MimeMultipart();
          // Create the message part
          ??? BodyPart messageBodyPart = new MimeBodyPart();

          ??? // Fill the message
          ??? messageBodyPart.setText(body);

          ??? mp.addBodyPart(messageBodyPart);

          ????? /*發送附件*/
          ???? if (file != null && file.length > 0) {
          ?????? //利用枚舉器方便的遍歷集合
          ???????? MimeBodyPart mbp = new MimeBodyPart();?
          //???????? File fileTmp = null;
          ???????? //得到數據源
          //???????? 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");

          ??? //添加認證信息
          ??? 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 小鐵匠 閱讀(647) 評論(1)  編輯  收藏 所屬分類: java

          評論:
          # re: java 發mail 2008-04-01 22:16 | 草包書生
          我也來研究一下,支持中文的附件  回復  更多評論
            
          主站蜘蛛池模板: 宁乡县| 洛宁县| 高邑县| 漾濞| 抚州市| 昌都县| 扶余县| 潜山县| 定远县| 中方县| 武鸣县| 大新县| 泰来县| 鸡西市| 花莲县| 马山县| 同江市| 永胜县| 淮北市| 台中市| 神农架林区| 金堂县| 兴隆县| 平远县| 澜沧| 乌兰察布市| 盐源县| 库尔勒市| 屏南县| 安泽县| 开化县| 贵港市| 双流县| 西宁市| 剑川县| 永善县| 渝中区| 安龙县| 南乐县| 黑龙江省| 凤城市|