javamail 附件和文本内容不能实现同时发送[在线等]
Properties props = System.getProperties();
props.put("mail.smtp.host", this.smtp);
props.put("mail.smtp.auth", "true");
SendMailAuthenticator myauth = new SendMailAuthenticator();
myauth.check(this.user, this.password);
Session session = Session.getDefaultInstance(props, myauth);
session.setDebug(true);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(this.from));//发信人
String[] to = this.addressee.split(";");//以;分割
if(to != null && to.length > 0)//收信人
{
int count = to.length;
InternetAddress[] address = new InternetAddress[count];
for(int i = 0; i < count; i++)
{
address[i] = new InternetAddress(to[i].toString());
System.out.println("收件人: "+to[i].toString());
}
msg.addRecipients(Message.RecipientType.BCC, address);
}
msg.setSentDate(new Date());//日期
msg.setSubject(subject, "UTF-8");//主题
msg.setContent(body, "text/html;charset=UTF-8");//内容
if(arrFileName != null && arrFileName.length > 0)//附件
{
try{
Multipart mp = new MimeMultipart();
int fileCount = this.arrFileName.length;//附件的个数
if(fileCount > 0)
{
String path = "";
for(int i = 0; i < fileCount; i++) {
MimeBodyPart mbp = new MimeBodyPart();
path = arrFileName[i];
System.out.println("附件地址: "+arrFileName[i]);
FileDataSource fds = new FileDataSource(path);
mbp.setDataHandler(new DataHandler(fds));
try {
mbp.setFileName(MimeUtility.encodeText(fds.getName(),"gb2312",null));
} catch (UnsupportedEncodingException e) {
this.setErrorInfo("文件名不能是中文字符");
e.printStackTrace();
}
mp.addBodyPart(mbp);// 添加至Multipart
}
msg.setContent(mp);// Multipart加入到信件
}
}catch(MessagingException e){
System.out.println("添加附件出错:"+e.getMessage());
}
}else{
System.out.println("-------没有附加附件-------");
}
msg.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(this.smtp, this.user, this.password);
transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.BCC));
transport.close();
------------------------------------------
代码有些乱~
主要看红色的两处,第一个是设置文本内容,第二个是添加附件的。
为什么添加附件的这个在最后,发出去的邮件里就只有附件;
把第一个调在最后,发出去的邮件里就只有文本内容;
是不是不能这样写?
怎样实现同时成功发送附件和文本内容呢?
[解决办法]
不会,但是在网上有一段,你看一下,或许对你有帮助
package com.sendEmailTest.bak; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Arrays; import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.Authenticator; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.Multipart; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.swing.text.html.MinimalHTMLWriter; /** * <P> * Title:用java发送邮件的例子 * </P> * * <P> * Description:发送图片附件并在html中使用该图片 * </P> * * <P> * Copyright: Copyright (c) 2007 * </P> * * @author * @main * @date */ public class SendMail { private static String username = "*************"; private static String password = "**********"; private static String smtpServer = "smtp.qq.com"; private static String fromMailAddress = "********@qq.com"; private static String toMailAddress = "********@hotmail.com"; public static void main(String[] args) throws Exception { Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.host", smtpServer); // 获得邮件会话对象 Session session = Session.getDefaultInstance(props, new SmtpAuthenticator(username, password)); /** *************************************************** */ // 创建MIME邮件对象 MimeMessage mimeMessage = new MimeMessage(session); System.out.println("发件人:"+new InternetAddress(fromMailAddress)); mimeMessage.setFrom(new InternetAddress(fromMailAddress));// 发件人 mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(toMailAddress));// 收件人 mimeMessage.setSubject("主题"); mimeMessage.setSentDate(new Date());// 发送日期 Multipart mp = new MimeMultipart("related");// related意味着可以发送html格式的邮件 /** *************************************************** */ BodyPart bodyPart = new MimeBodyPart();// 正文 String str = "<table width=40% border='1'><tr><td>我的邮箱</td><td><input type='text' id='myEmail' name='myEmail'></input></td></tr> <tr><td>好友的邮箱</td><td><input type='text' id='freEmail' name='freEmail'></td></tr><tr><td colspan=2 align=center><input type='button' value='推荐给好友'></td></tr></table>"; //String str = ReadCode.getWebCon("http://192.168.1.101:8080/sendEmail/web/index.htm"); bodyPart.setDataHandler(new DataHandler(str, "text/html;charset=utf-8"));// 网页格式 /** *************************************************** */ /*BodyPart attachBodyPart = new MimeBodyPart();// 普通附件 FileDataSource fds = new FileDataSource("c:/boot.ini"); attachBodyPart.setDataHandler(new DataHandler(fds)); attachBodyPart.setFileName("=?GBK?B?"+ new sun.misc.BASE64Encoder().encode(fds.getName().getBytes())+ "?=");// 解决附件名中文乱码 mp.addBodyPart(attachBodyPart); */ /** *************************************************** */ /* MimeBodyPart imgBodyPart = new MimeBodyPart(); // 附件图标 byte[] bytes = readFile("C:/button.gif"); ByteArrayDataSource fileds = new ByteArrayDataSource(bytes, "application/octet-stream"); imgBodyPart.setDataHandler(new DataHandler(fileds)); imgBodyPart.setFileName("button.gif"); imgBodyPart.setHeader("Content-ID", "<IMG1></IMG1>");// 在html中使用该图片方法src="cid:IMG1" mp.addBodyPart(imgBodyPart); */ /** *************************************************** */ mp.addBodyPart(bodyPart); mimeMessage.setContent(mp);// 设置邮件内容对象 Transport.send(mimeMessage);// 发送邮件 } /** * 读取文件 * * @param file * 文件路径 * @return 返回二进制数组 */ public static byte[] readFile(String file) { FileInputStream fis = null; ByteArrayOutputStream bos = null; try { fis = new FileInputStream(file); bos = new ByteArrayOutputStream(); int bytesRead; byte buffer[] = new byte[1024 * 1024]; while ((bytesRead = fis.read(buffer)) != -1) { bos.write(buffer, 0, bytesRead); Arrays.fill(buffer, (byte) 0); } } catch (IOException e1) { e1.printStackTrace(); } finally { try { if (bos != null) bos.close(); } catch (IOException e) { e.printStackTrace(); } } return bos.toByteArray(); } } /** * Smtp认证 */ class SmtpAuthenticator extends Authenticator { String username = null; String password = null; // SMTP身份验证 public SmtpAuthenticator(String username, String password) { this.username = username; this.password = password; } public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(this.username, this.password); } } class ByteArrayDataSource implements DataSource { private final String contentType; private final byte[] buf; private final int len; public ByteArrayDataSource(byte[] buf, String contentType) { this(buf, buf.length, contentType); } public ByteArrayDataSource(byte[] buf, int length, String contentType) { this.buf = buf; this.len = length; this.contentType = contentType; } public String getContentType() { if (contentType == null) return "application/octet-stream"; return contentType; } public InputStream getInputStream() { return new ByteArrayInputStream(buf, 0, len); } public String getName() { return null; } public OutputStream getOutputStream() { throw new UnsupportedOperationException(); } }
[解决办法]
上面那个可以的,我测试过的,你出现什么问题了