隨筆-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 | 草包書生
          我也來研究一下,支持中文的附件  回復  更多評論
            
          主站蜘蛛池模板: 芜湖县| 蒙城县| 贺州市| 格尔木市| 新丰县| 错那县| 阿瓦提县| 通辽市| 常宁市| 信丰县| 长乐市| 科技| 涟源市| 莒南县| 和田市| 闽清县| 泾川县| 侯马市| 南乐县| 南投市| 松阳县| 宜良县| 墨脱县| 朝阳区| 建昌县| 武山县| 辰溪县| 独山县| 东源县| 双柏县| 潼关县| 新和县| 三亚市| 江门市| 茌平县| 包头市| 瓮安县| 城固县| 项城市| 东宁县| 曲麻莱县|