标签: jakarta-mail

如何为使用spring的JavaMailSenderImpl发送的电子邮件设置内容类型

问题来自主题.我正在使用Spring 3.0.3.RELEASE和velocity 1.6.4中的JavaMailSenderImpl从模板进行邮件准备.

当我从我的webapp收件人发送带有克罗地亚字符的电子邮件时收到"?" 在正常的克罗地亚人的立场.如果我为邮件调试调试模式,从日志中我可以看到Content-type设置为:

Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit
Run Code Online (Sandbox Code Playgroud)

如何将其设置为:

Content-Type: text/html; charset=utf-8?
Run Code Online (Sandbox Code Playgroud)

我正在开发这个webapp时使用gmail进行邮件发送.

以下是我在spring的servlet xml conf文件中的设置:

<bean id="userAuthorizationManager" class="com.mypackage.manage.SimpleUserAuthorizationManagerImpl">
    <property name="mailSender" ref="mailSender" />
    <property name="velocityEngine" ref="velocityEngine" />
    <property name="from" value="address" />
    <property name="authorizationAddress" value="some text" />
    <property name="subject" value="some text" />
</bean>

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="smtp.gmail.com" />
    <property name="port" value="465" />
    <property name="username" value="user" />
    <property name="password" value="pass" />
    <property name="protocol" value="smtps" />

    <property name="javaMailProperties">
        <props>
            <prop key="mail.smtp.auth">true</prop>
            <prop key="mail.smtp.connectiontimeout">5000</prop>
            <prop key="mail.smtp.sendpartial">true</prop>
            <prop key="mail.smtp.userset">true</prop> …
Run Code Online (Sandbox Code Playgroud)

email spring velocity jakarta-mail

11
推荐指数
1
解决办法
2万
查看次数

JavaMail是否支持服务器推送?

JavaMail是否支持通过服务器推送通知新电子邮件?

如果是,那么该文件在哪里?如果没有,是否有可以执行此操作的库?

email push jakarta-mail

11
推荐指数
1
解决办法
6753
查看次数

Java Mail API - 编码问题

我正在使用Java Mail API,我正在尝试通过Gmail的SMTP发送电子邮件.我的程序如何工作:java.util.Scanner类用于获取用户输入 - 我要求用户在邮件发送类中使用各种参数; 执行以下操作:

Message mailMessage = new MimeMessage(session);
mailMessage.setFrom(new InternetAddress("example@example.com"));
mailMessage.setRecipients(Message.RecipientType.TO,InternetAddress.parse(mail.getTo()));
mailMessage.setSubject(mail.getSubject());
mailMessage.setText(mail.getMessage());
Transport.send(mailMessage);
Run Code Online (Sandbox Code Playgroud)

只要我使用ASCII符号/字符,一切都有效.但每当我想使用"特定国家"字符时 - 比如[õäöü] - 我会看到一堆奇怪的符号......

到目前为止我使用的技术(对我来说不起作用):

setHeader("Content-Type", "text/plain; charset=UTF-8");
setHeader("Content-Encoding","ISO-8859-9");
setContent(message, "text/plain; charset=iso-8859-2");
Run Code Online (Sandbox Code Playgroud)

注意:执行System.out.println()以显示要发送的消息时,IDE中的所有内容都会正确显示.

编辑:ex发送邮件正文时[õäöü]它在Gmail中显示[ä""?].

编辑:何时mailMessage.setText(MimeUtility.encodeText(mail.getMessage(), "UTF-8", "Q"));使用,然后Gmail中的输出如下:

"=?UTF-8?Q?=C3=A4=E2=80=9E=E2=80=9D=EF=BF=BD;=0D=0A?="
Run Code Online (Sandbox Code Playgroud)

另一个编辑:有趣的是,当我这样做时:mailMessage.setText(strVar + "õäöü", "ISO-8859-1"); 它实际上在我的电子邮件中很好地附加了"õäöü"(但字符串的第一部分[strVar]仍然充满了?和[]的).

java email api encoding jakarta-mail

11
推荐指数
3
解决办法
4万
查看次数

通过SMTP发送带附件,纯文本/文本和文本/ hml的电子邮件

我的目标:使用普通/文本,文本/ html和附件通过SMTP发送交易电子邮件.

我的代码:用JavaMail实现

我的问题:它在hotmail或outlook上看起来很好.但是在gmail上,如果它是带有.txt附件的电子邮件,它就不会正确显示邮件正文(如果附件是图像,它可以正常工作)

任何帮助将受到高度赞赏.

这是我的原始SMTP输出:

Subject: ALTERNATIVE | TXT | HTML |ATT.ATTACHMENT | Thu Jun 13 17:48:04 EDT
 2013
MIME-Version: 1.0
Content-Type: multipart/alternative; 
    boundary="----=_Part_0_21791733.1371160084561"

------=_Part_0_21791733.1371160084561
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Body message in text format!
------=_Part_0_21791733.1371160084561
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

Body message in <b>html</b> format! Sent on Thu Jun 13 17:48:04 EDT 2013<br> to: me@gmail.com<br> to: me@mijo.com<br> cc: me@hotmail.com<br> cc: rafael.santos.test@hotmail.com
------=_Part_0_21791733.1371160084561
Content-Type: text/plain; charset=us-ascii; name=email_attachment.txt
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename=email_attachment.txt

This is …
Run Code Online (Sandbox Code Playgroud)

email smtp jakarta-mail html-email email-attachments

11
推荐指数
1
解决办法
3万
查看次数

JavaMail没有在jetty下发送Subject或From:run-war

有没有人看到JavaMail没有向SMTP服务器发送正确的MimeMessages,具体取决于JVM的启动方式?在一天结束时,我无法使用Subject:或From:字段发送JavaMail SMTP邮件,并且只有在将应用程序作为战争运行时才会显示其他标题丢失.

Web项目是使用Maven构建的,我正在测试使用浏览器和简单的mail.jsp发送JavaMail来调试并在启动应用程序时看到不同的行为:

1)mvn jetty:run(邮件发送正常,有正确的Subject和From字段)

2)mvn jetty:run-war(邮件发送正常,但缺少主题,发件人和其他字段)

我在(详细)Maven调试输出(-X)上精心运行diff,并且两者之间的运行时依赖性没有差别.我还比较了系统属性,它们是相同的.Jetty发生了其他事情:运行战争案例改变了JavaMail的行为方式.还有什么需要转动?

奇怪的是,我在两种情况下都尝试过调试器,发现javax.mail.internet.MimeMessage实例的创建方式不同.webapp使用Spring发送从Apache ActiveMQ队列中挑选的电子邮件.运行应用程序时,mvn jetty:runMimeMessage.contentStream变量用于邮件内容.运行时mvn jetty:run-war,MimeMessage.content变量用于消息内容,content = ASCIIUtility.getBytes(is); call从已解析的内容中删除所有标头数据.由于这看起来很奇怪,并且调试Spring/ActiveMQ是一个深入的研究,我创建了一个没有任何基础结构的简化测试:只使用了一个使用mail-1.4.2.jar的JSP,但缺少相同的头文件.

另外值得注意的是,在Tomcat 5.5.27下运行WAR文件时,缺少这些头文件.运行WAR时,Tomcat的行为就像Jetty一样,缺少相同的标头.

打开JavaMail调试后,我清楚地看到不同的输出.

好的案例:在jetty:run(非WAR)中,日志输出是:

DEBUG: JavaMail version 1.4.2
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, …
Run Code Online (Sandbox Code Playgroud)

java smtp jakarta-mail war

10
推荐指数
1
解决办法
7793
查看次数

以Pdf附件的形式发送电子邮件作为流

我想发送一个Pdf作为电子邮件附件(我正在使用JavaMail API).我有一个Pdf(由jasper生成)作为byte[].

public InputStream exportPdfToInputStream(User user) throws ParseErrorException, MethodInvocationException, ResourceNotFoundException, JRException, IOException{
        JasperPrint jasperPrint = createJasperPrintObject(user);
        byte[] pdfByteArray = JasperExportManager.exportReportToPdf(jasperPrint);
        return new ByteArrayInputStream(pdfByteArray);
    }
Run Code Online (Sandbox Code Playgroud)

这是我用来构建MimeBodyPart附件的代码:

    if (arrayInputStream != null && arrayInputStream instanceof ByteArrayInputStream) {
        MimeBodyPart attachment = new MimeBodyPart(arrayInputStream);
        attachment.setHeader("Content-Type", "application/pdf");
        mimeMultipart.addBodyPart(attachment);
    }
Run Code Online (Sandbox Code Playgroud)

这段代码给了我这个错误:

javax.mail.MessagingException: IOException while sending message;
  nested exception is:
    java.io.IOException: Error in encoded stream: needed at least 2 valid base64 characters, but only got 1 before padding character (=), the 10 most recent …
Run Code Online (Sandbox Code Playgroud)

java email jakarta-mail mime-types

10
推荐指数
2
解决办法
3万
查看次数

如何在电子邮件中设置"名称"属性

我发送邮件与Java邮件和SMTP服务器.我希望能够更改收件人在收到电子邮件时看到的"名称" - 而不仅仅是电子邮件地址的前缀(@之前的位).

我怀疑我需要更改或添加'props.put();' 设置,但我无法解决哪一个.

public class Email {

    private final String HOST = "mail.myserverr.com";
    private final String USER = "me+myserver.com";
    private final String FROM = "me@myserver.com";
    private final String PASS = "mypass";
    private final String PORT = "25";
    private final String AUTH = "true";

    @Test
    public void sendMail(){
        String[] to = {"mygmail@gmail.com","me@myservercom"};
        sendMessage(to,"Let's go","What's up");

    }

    public void sendMessage(String[] to, String subject, String msg) {

        Properties props = System.getProperties();
            props.put("mail.smtp.starttls.enable", "true"); // added this line
            props.put("mail.smtp.host", HOST);
            props.put("mail.smtp.user", USER); …
Run Code Online (Sandbox Code Playgroud)

java smtp jakarta-mail

10
推荐指数
2
解决办法
2万
查看次数

Java Mail:Session

下面用于连接和执行IMAP文件夹操作的代码.所以我的问题是关于javax.mail.Session在这种情况下每秒重建一次(取决于checkInbox()的休眠时间和运行时间).

我确信这不是一个好的解决方案,特别是对IMAP的调查有点愚蠢,但我无法IMAP listener运行.

不是每次运行都重新创建会话可能是一个更好的解决方案,但我怎么知道何时session is closed或是否可以故意关闭它?但是没有什么Session.close()比Session或者什么更像是NULL?或者会话上有一些已定义的超时...

来源:

final String port = "993";

Properties prop = new Properties();

// I assume there is some redundancy here but this didn't cause any problems so far
prop.setProperty("mail.imaps.starttls.enable", "true");
prop.setProperty("mail.imaps.port", port);

/** This part can be removed
 * prop.setProperty("mail.imaps.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
 * prop.setProperty("mail.imaps.socketFactory.port", port); 
 * prop.setProperty("mail.imaps.socketFactory.fallback", "false"); 
 */
prop.setProperty("mail.imap.ssl.enable", "true");
prop.setProperty("mail.debug", "false");

// Create a session before you loop since the configuration doesn't change
Session session …
Run Code Online (Sandbox Code Playgroud)

java email imap jakarta-mail

10
推荐指数
1
解决办法
1万
查看次数

javax.mail.MessagingException:无法连接到SMTP主机:localhost,port:25

我在发送电子邮件时遇到问题.

javax.mail.SendFailedException: Sending failed;
  nested exception is: 
    javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;
  nested exception is: 
    java.net.ConnectException: Connection refused: connect
    at javax.mail.Transport.send0(Transport.java:219)
    at javax.mail.Transport.send(Transport.java:81)
    at org.apache.jsp.online_005fScheme_005fSend_005fMail_jsp.sendMail(online_005fScheme_005fSend_005fMail_jsp.java:116)
    at org.apache.jsp.online_005fScheme_005fSend_005fMail_jsp._jspService(online_005fScheme_005fSend_005fMail_jsp.java:416)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:619)
Run Code Online (Sandbox Code Playgroud)

我使用下面的代码snipet.

Properties props = new Properties();
     props.put("mail.smtp.host", "10.101.3.229"); …
Run Code Online (Sandbox Code Playgroud)

java jakarta-mail tomcat5.5

10
推荐指数
2
解决办法
10万
查看次数

JavaMail:Java.awt.datatransfer.Transferable 不存在

我不打算提出问题,但我没有解决这个问题!
我在从 IMAP 服务器接收消息时遇到问题。
错误说“由:java.lang.ClassNotFoundException:在路径上找不到类“java.awt.datatransfer.Transferable”......”这是我的代码:

enter String test(){
    String all="";
    try{
        class Runner extends AsyncTask<Object, String, String> {
            @Override
            protected String doInBackground(Object... params) {
                Looper.prepare();
                String all ="";
                try{
                    Message[] msgs = ReceiveMail("imap.gmail.com","993","USER@gmail.com","PASS"); // After passing this line, error logging says error is in this line!
                    for(Message m: msgs){
                        all+=m.getSubject()+"\n"+m.getContent().toString()+"\n\n"; // Error shows here, but popups above
                    }
                    return all;
                }catch (Exception e){
                    e.printStackTrace();
                }
                Looper.loop();
                return all;
            }
        }
        Runner r = new Runner();
        all = r.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, this).get();
    }catch …
Run Code Online (Sandbox Code Playgroud)

java android jakarta-mail

10
推荐指数
2
解决办法
4945
查看次数