问题来自主题.我正在使用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) JavaMail是否支持通过服务器推送通知新电子邮件?
如果是,那么该文件在哪里?如果没有,是否有可以执行此操作的库?
我正在使用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]仍然充满了?和[]的).
我的目标:使用普通/文本,文本/ 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) 有没有人看到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) 我想发送一个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邮件和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) 下面用于连接和执行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) 我在发送电子邮件时遇到问题.
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) 我不打算提出问题,但我没有解决这个问题!
我在从 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) jakarta-mail ×10
java ×7
email ×6
smtp ×3
android ×1
api ×1
encoding ×1
html-email ×1
imap ×1
mime-types ×1
push ×1
spring ×1
tomcat5.5 ×1
velocity ×1
war ×1