通过 JavaMail 发送的纯文本电子邮件作为附件到达
Plain text email sent via JavaMail arrives as an attachment
我已经编写了一个通过 java 邮件发送的代码 API.Everything 工作正常,但是我发送的纯文本以可下载附件的形式被收件人接收,而不是纯文本消息。
我不知道为什么会这样。
下面给出的是我 运行 时的代码及其输出。
String toEmail=request.getParameter("email");
String subject=request.getParameter("subject");
String message=request.getParameter("message");
String fromEmail="suyash.tilhari12@gmail.com";
String username="suyash.tilhari12";
String password="********";
mailSender.sendEmail(fromEmail, username, password, toEmail, subject, message);
public void sendEmail(String fromEmail,String username,String password,
String toEmail,String subject,String message)
{
try
{
Properties props= System.getProperties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.fallback", "false");
Session mailSession = Session.getDefaultInstance(props, null);
mailSession.setDebug(true);
Message mailMessage=new MimeMessage(mailSession);
mailMessage.setFrom(new InternetAddress(fromEmail));
mailMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));
mailMessage.setContent(message, "html/text");
mailMessage.setSubject(subject);
Transport transport=mailSession.getTransport("smtp");
transport.connect("smtp.gmail.com",username,password);
transport.sendMessage(mailMessage, mailMessage.getAllRecipients());
}
catch (Exception ex) {
Logger.getLogger(MailSenderBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
我用过 Java Mail API ,NetBeans IDE ,Glassfish Server,Enterprise JAVA Bean。
结果如下:
邮件收件人-
你看,简单的短信是附件的形式。
邮件在这个附件中,现在下载并打开-
这是怎么引起的,我该如何解决?
@Suyash:请尝试按照有关此 http://www.tutorialspoint.com/java/java_sending_email.htm link.
的说明进行操作
尝试将内容设置为 "text/html"
而不是 "html/text"
所以它应该看起来像:
setContent(message, "text/html" );
您遇到的问题与 MIME 内容有关。一切都正确,但那部分不正确。
在那一行
mailMessage.setContent(message, "html/text");
您正在使用 "html/text" 作为无效的 MIME 类型。
您可以在此处找到 MIME 类型列表:
http://www.sitepoint.com/web-foundations/mime-types-complete-list/
代码应该是
mailMessage.setContent(message, "text/plain");
或
mailMessage.setContent(message, "text/plain; charset=UTF-8");
包括字符集信息(ISO-8859-1、UTF-8 等)。
这是只发送一个内容的情况。如果您需要发送不同格式的内容(例如 html 和纯文本)或者您需要发送附件,则必须使用 MimeMultipart
我已经编写了一个通过 java 邮件发送的代码 API.Everything 工作正常,但是我发送的纯文本以可下载附件的形式被收件人接收,而不是纯文本消息。
我不知道为什么会这样。 下面给出的是我 运行 时的代码及其输出。
String toEmail=request.getParameter("email");
String subject=request.getParameter("subject");
String message=request.getParameter("message");
String fromEmail="suyash.tilhari12@gmail.com";
String username="suyash.tilhari12";
String password="********";
mailSender.sendEmail(fromEmail, username, password, toEmail, subject, message);
public void sendEmail(String fromEmail,String username,String password,
String toEmail,String subject,String message)
{
try
{
Properties props= System.getProperties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.fallback", "false");
Session mailSession = Session.getDefaultInstance(props, null);
mailSession.setDebug(true);
Message mailMessage=new MimeMessage(mailSession);
mailMessage.setFrom(new InternetAddress(fromEmail));
mailMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));
mailMessage.setContent(message, "html/text");
mailMessage.setSubject(subject);
Transport transport=mailSession.getTransport("smtp");
transport.connect("smtp.gmail.com",username,password);
transport.sendMessage(mailMessage, mailMessage.getAllRecipients());
}
catch (Exception ex) {
Logger.getLogger(MailSenderBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
我用过 Java Mail API ,NetBeans IDE ,Glassfish Server,Enterprise JAVA Bean。
结果如下:
邮件收件人- 你看,简单的短信是附件的形式。
邮件在这个附件中,现在下载并打开-
这是怎么引起的,我该如何解决?
@Suyash:请尝试按照有关此 http://www.tutorialspoint.com/java/java_sending_email.htm link.
的说明进行操作尝试将内容设置为 "text/html"
而不是 "html/text"
所以它应该看起来像:
setContent(message, "text/html" );
您遇到的问题与 MIME 内容有关。一切都正确,但那部分不正确。
在那一行
mailMessage.setContent(message, "html/text");
您正在使用 "html/text" 作为无效的 MIME 类型。
您可以在此处找到 MIME 类型列表: http://www.sitepoint.com/web-foundations/mime-types-complete-list/
代码应该是
mailMessage.setContent(message, "text/plain");
或
mailMessage.setContent(message, "text/plain; charset=UTF-8");
包括字符集信息(ISO-8859-1、UTF-8 等)。
这是只发送一个内容的情况。如果您需要发送不同格式的内容(例如 html 和纯文本)或者您需要发送附件,则必须使用 MimeMultipart