Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
附件文件名get';从JAVA mail发送到IMAP邮箱时发生了更改_Java_Jakarta Mail_Wildfly 9 - Fatal编程技术网

附件文件名get';从JAVA mail发送到IMAP邮箱时发生了更改

附件文件名get';从JAVA mail发送到IMAP邮箱时发生了更改,java,jakarta-mail,wildfly-9,Java,Jakarta Mail,Wildfly 9,我正在通过JAVA mail发送带有excel附件文件的邮件。每当我将电子邮件发送到IMAP邮箱时,它的文件名都会更改为无标题附件,这与我为其他邮箱传递的文件名相反 我已经联系了我提供的电子邮件,他们怀疑这是RFC 2231中默认格式为JAVa mail的格式问题,对于IMAP,它必须是RFC 2047/2231 注意:应用程序是使用Java8部署在Widfly 9上的 下面是我如何调用该方法的: ByteArrayOutputStream baos = new ByteArrayOutputS

我正在通过JAVA mail发送带有excel附件文件的邮件。每当我将电子邮件发送到IMAP邮箱时,它的文件名都会更改为无标题附件,这与我为其他邮箱传递的文件名相反

我已经联系了我提供的电子邮件,他们怀疑这是RFC 2231中默认格式为JAVa mail的格式问题,对于IMAP,它必须是RFC 2047/2231

注意:应用程序是使用Java8部署在Widfly 9上的

下面是我如何调用该方法的:

ByteArrayOutputStream baos = new ByteArrayOutputStream(excel_bytes.length);
baos.write(excel_bytes, 0, excel_bytes.length);

DataSource aAttachment = new  ByteArrayDataSource(baos.toByteArray(),"application/vnd.ms-excel");

String to_email = tenant.getEmail(); 
email.sendRechargeBillEmail(to_email, aAttachment, file_name + ".xlsx",tenant.getCompanyName(), String.valueOf(job.getStartDate()), String.valueOf(job.getEndDate()));
这是一个具有电子邮件方法的类: 包com.nextcontrols.com

import java.awt.Color;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import java.util.logging.Logger;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
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.mail.internet.MimeUtility;

public class SendAttachmentInEmail {
    private static final Logger logger = 
    Logger.getLogger(SendAttachmentInEmail.class.getCanonicalName());
   public void sendEmail(String to_email, DataSource attachment, String 
     file_name, String from_email, String user_name, String password, String 
     email_body, String email_subject) {

      Properties props = new Properties();
      props.put("mail.smtp.host", "mail2.nextcontrols.local");
      Session session = Session.getDefaultInstance(props);

      try { 
         Message message = new MimeMessage(session);

         message.setFrom(new InternetAddress(from_email));

         message.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse(to_email));

         message.setSubject(email_subject);

         MimeBodyPart messageBodyPart = new MimeBodyPart();

         messageBodyPart.setContent(email_body, "text/html; charset=utf-8");

         Multipart multipart = new MimeMultipart();

         multipart.addBodyPart(messageBodyPart);

         MimeBodyPart mailattachment = new MimeBodyPart();
          DataSource source = attachment;

         mailattachment.setFileName(file_name);
         mailattachment.setDataHandler(new DataHandler(source));
         mailattachment.setDisposition(MimeBodyPart.ATTACHMENT); 
         multipart.addBodyPart(mailattachment);
         message.setContent(multipart);

         Transport.send(message);
         logger.info("////// Sent message successfully to "+ to_email);

      } catch (MessagingException e) {
         throw new RuntimeException(e);
      }
   }

   public void sendRechargeBillEmail(String to_email, DataSource attachment, String file_name,String tenant_name, String start_date, String end_date){

       String subject = "Billing - " + tenant_name + " - " + start_date + " to " + end_date;
       String bodyText = "Please find attached your utility recharge bill for " + start_date + " to " + end_date;
       String note = "<i>This is an automated email, please do not reply to this address</i>";
       String fromText = "Regards,<br />-- <br />";
       String disclaimerTop = "Privacy and Confidentiality Notice";
       String disclaimerDown = " txt";

       bodyText = bodyText + "<br /> <br /> <br />" + note + "<br />" + fromText + "<br />" + addColor (disclaimerTop, Color.GRAY ,"2") + "<br />" + addColor(disclaimerDown, Color.GRAY, "1");

       sendEmail(to_email, attachment, file_name, "noreply@nxt.com", "Billing", "billing", bodyText, subject);
   }
   public static String addColor(String msg, Color color, String size) {
        String hexColor = String.format("#%06X",  (0xFFFFFF & color.getRGB()));
        String colorMsg = "<FONT size = \" "+ size +"\" COLOR=\"" + hexColor + "\">" + msg + "</FONT>";
        return colorMsg;
    }
}
导入java.awt.Color;
导入java.io.ByteArrayOutputStream;
导入java.io.UnsupportedEncodingException;
导入java.util.Properties;
导入java.util.logging.Logger;
导入javax.activation.DataHandler;
导入javax.activation.DataSource;
导入javax.mail.BodyPart;
导入javax.mail.Message;
导入javax.mail.MessaginException;
导入javax.mail.Multipart;
导入javax.mail.PasswordAuthentication;
导入javax.mail.Session;
导入javax.mail.Transport;
导入javax.mail.internet.InternetAddress;
导入javax.mail.internet.MimeBodyPart;
导入javax.mail.internet.mimessage;
导入javax.mail.internet.MimeMultipart;
导入javax.mail.internet.mime实用程序;
公共类SendAttachmentInEmail{
专用静态最终记录器=
getLogger(SendAttachmentInEmail.class.getCanonicalName());
public void sendmail(字符串到_电子邮件、数据源附件、字符串
文件名、电子邮件中的字符串、字符串用户名、字符串密码、字符串
电子邮件(正文、字符串电子邮件(主题){
Properties props=新属性();
put(“mail.smtp.host”、“mail2.nextcontrols.local”);
Session Session=Session.getDefaultInstance(props);
试试{
Message Message=新的mimessage(会话);
message.setFrom(新的Internet地址(来自电子邮件));
message.setRecipients(message.RecipientType.TO,
InternetAddress.parse(to_email));
message.setSubject(电子邮件主题);
MimeBodyPart messageBodyPart=新的MimeBodyPart();
setContent(email_body,“text/html;charset=utf-8”);
Multipart Multipart=新的MimeMultipart();
multipart.addBodyPart(messageBodyPart);
MimeBodyPart邮件附件=新的MimeBodyPart();
数据源=附件;
mailattachment.setFileName(文件名);
setDataHandler(新的DataHandler(源));
mailattachment.setDisposition(MimeBodyPart.ATTACHMENT);
多部分addBodyPart(邮件附件);
message.setContent(多部分);
传输。发送(消息);
logger.info(“//已成功将消息发送到”+收件人电子邮件);
}捕获(消息异常e){
抛出新的运行时异常(e);
}
}
公用邮件(字符串到电子邮件、数据源附件、字符串文件名、字符串租户名、字符串开始日期、字符串结束日期){
字符串subject=“计费-”+租户名称+“-”+开始日期+”到“+结束日期”;
String bodyText=“请查看随附的“+开始日期+”至“+结束日期”的公用事业充电账单;
String note=“这是一封自动电子邮件,请不要回复此地址”;
String fromText=“问候,
--
”; String discreatertop=“隐私和保密通知”; 字符串disclaiderdown=“txt”; bodyText=bodyText+“

”+note+“
”+fromText+“
”+addColor(免责声明,Color.GRAY,“2”)+“
”+addColor(免责声明,Color.GRAY,“1”); 发送电子邮件(发送电子邮件、附件、文件名、noreply@nxt.com“,”账单“,”账单“,”正文,主题); } 公共静态字符串addColor(字符串消息、颜色、字符串大小){ String-hexColor=String.format(“#%06X”),(0xFFFFFF&color.getRGB()); 字符串colorMsg=“”+msg+”; 返回colorMsg; } }
如果您的IMAP服务器因为不理解RFC 2231而更改文件名,那么它确实需要更新。RFC 2231已有20年历史


通过将JavaMail系统属性设置为“false”,可以禁用使用RFC 2231对文件名进行编码。

我尝试添加该属性,如:Properties props=new Properties();props.put(“mail.mime.encodeparameters”、“false”);put(“mail.mime.encodefilename”,“true”);Session Session=Session.getDefaultInstance(props);以及类似的:System.setProperty(“mail.mime.encodeparameters”、“false”);System.setProperty(“mail.mime.encodefilename”、“true”);但是没有任何区别,系统属性是在第一次加载JavaMail类时读取的,所以您需要在JVM启动时设置它们。如果您在Wildfly下运行,那么可能是其他东西首先加载了类。尝试在Wildfly启动中设置它们。感谢您的帮助。当我在Wildfly的standalone.conf.bat中设置这个属性时,它起作用了,比如:set“JAVA_OPTS=%JAVA_OPTS%-Dmail.mime.encodeparameters=false”太棒了!并且一定要告诉你的电子邮件提供商他们需要升级他们的服务器!