我正在尝试在groovy脚本中使用javamail通过gmail发送电子邮件.我在网上看了很多地方,到目前为止还没能让它运转起来.我在运行脚本时遇到的错误是:
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 25, isSSL false
Caught: javax.mail.SendFailedException: Send failure (javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 25 (javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?))
Run Code Online (Sandbox Code Playgroud)
它似乎尝试使用端口25,即使我已经指定它应该使用端口587.有谁知道可能导致此问题的原因,我已经使用telnet连接到端口587上的smtp服务器,并且thunderbird使用端口587具有STARTTLS安全性,并且能够使用smtp服务器成功发送邮件.这告诉我它不是阻塞端口或连接问题.这是我用来尝试发送电子邮件的代码:
import javax.mail.*
import javax.mail.internet.*
private class SMTPAuthenticator extends Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication('email@gmail.com', 'password');
}
}
def d_email = "email@gmail.com",
d_password = "password",
d_host = "smtp.gmail.com",
d_port = "587", //465,587
m_to = "email@gmail.com",
m_subject = "Testing", …Run Code Online (Sandbox Code Playgroud) 下面的程序显示HTML multipart mime类型的意外返回值.为什么这个程序打印"text/plain"而不是"text/html"?
public class Main {
public static void main(String[] args) throws javax.mail.MessagingException, java.io.IOException {
javax.mail.internet.MimeBodyPart mime_body_part = new javax.mail.internet.MimeBodyPart();
mime_body_part.setContent("<h1>foo</h1>", "text/html");
System.out.println(mime_body_part.getContentType());
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了许多替代方法,包括设置包装在DataHandler中的ByteArrayDataSource,但无济于事.当我用MimeMessage而不是MimeBodyPart尝试这个时,会发生同样的事情.
要在Linux上编译和运行:
javac -classpath .:activation.jar:mail.jar Main.java
java -classpath .:activation.jar:mail.jar Main
Run Code Online (Sandbox Code Playgroud) 注意:回答后添加:谢谢..是的,我曾尝试过Flag.SEEN为true和saveChanges ..我也读过了读取的getContent标记.我尝试在循环消息的for语句中使用它.但是我在下一个循环中再次从文件夹中收到了消息.我假设文件夹是实时的,所以抓住内容,然后从过滤器的文件夹中再次抓取消息,看不到任何看到应该工作,但我仍然得到相同的消息.我可以尝试关闭文件夹并重新打开作为测试,以查看它是否已标记.此外,如果我转到我的客户端并单击该消息,那么我的代码即使在循环中也不会再看到它,所以我希望在代码中也这样做.
original:我正在使用javamail从gmail帐户获取电子邮件,它工作得很好,当我收到消息时我想将其标记为已阅读,是否有人可以给我一些指示?这是我目前的代码:
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
try {
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", eUserName, ePassWord);
// Get folder
Folder folder = store.getFolder("INBOX");
if (folder == null || !folder.exists()) {
return null;
}
folder.open(Folder.READ_ONLY);
// Only pull unread
FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
Message messages[]; // = folder.search(ft);
for(int x = 0; x < timeOutInSeconds; x++) {
log.reportMessage("looking for emails");
try {
folder.getMessages();
messages = folder.search(ft);
if (messages.length > 0) { …Run Code Online (Sandbox Code Playgroud) 发送到Email.java
package helper;
//Mail.java - smtp sending starttls (ssl) authentication enabled
//1.Open a new Java class in netbeans (default package of the project) and name it as "Mail.java"
//2.Copy paste the entire code below and save it.
//3.Right click on the file name in the left side panel and click "compile" then click "Run"
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
public class sendToEmail
{
String d_email = "sample@gmail.com",
d_password = "mysamplepassword",
d_host = "smtp.gmail.com",
d_port = "465",
//m_to = "sample@yahoo.com", …Run Code Online (Sandbox Code Playgroud) 我正在制作一个电子邮件应用程序,它在这个问题的标题中给出错误.我该如何解决这个问题?我正在给我的代码截图,如果它有助于找到解决方案.

我想使用javamail发送带有内嵌图像的电子邮件.
我正在做这样的事情.
MimeMultipart content = new MimeMultipart("related");
BodyPart bodyPart = new MimeBodyPart();
bodyPart.setContent(message, "text/html; charset=ISO-8859-1");
content.addBodyPart(bodyPart);
bodyPart = new MimeBodyPart();
DataSource ds = new ByteArrayDataSource(image, "image/jpeg");
bodyPart.setDataHandler(new DataHandler(ds));
bodyPart.setHeader("Content-Type", "image/jpeg; name=image.jpg");
bodyPart.setHeader("Content-ID", "<image>");
bodyPart.setHeader("Content-Disposition", "inline");
content.addBodyPart(bodyPart);
msg.setContent(content);
Run Code Online (Sandbox Code Playgroud)
我也试过了
bodyPart.setHeader("inline; filename=image.jpg");
Run Code Online (Sandbox Code Playgroud)
和
bodyPart.setDisposition("inline");
Run Code Online (Sandbox Code Playgroud)
但无论如何,图像都作为附件发送,内容处理正在变成"附件".
如何使用javamail在电子邮件中内联发送图像?
我正在发送一封电子邮件,但我正确地收到了该邮件,但该主题的编码不正确.我发送"invitación"但我收到"invitaci?n".消息内容正常.
当主题在String变量中设置时,消息的内容来自Velocity Template的转换.
我已经google了,我看到有人说MimeUtility.encodeText()可以解决问题,但我没有成功.
我该如何解决这个问题?这是我到目前为止的代码.
String subject = "Invitación";
String msgBody = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "/vmTemplates/template.vm", "UTF-8", model);
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
try {
String encodingOptions = "text/html; charset=UTF-8";
Message msg = new MimeMessage(session);
msg.setHeader("Content-Type", encodingOptions);
msg.setFrom(new javax.mail.internet.InternetAddress(emailFrom));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(emailTo));
msg.setSubject(subject);
msg.setContent(msgBody, encodingOptions);
Transport.send(msg);
} catch (AddressException e) {
...
} catch (MessagingException e) {
...
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我有一个需要发送确认电子邮件等的Tomcat应用程序.我已经用Javamail(mail.jar)编写了电子邮件编码器来发送多部分文本/ HTML电子邮件.我将代码基于Java EE示例.我在本地服务器上使用SMTP MTA.
它很棒.在Outlook中,我看到了HTML版本.如果我将其拖到Outlook垃圾邮件文件夹中,我会看到文本版本.所以我解释说它有效.
但是,如果我在Gmail中查看电子邮件,我只会看到文字版本.我知道HTML就在那里(这就是Outlook从中得到的).但是Gmail没有显示它...我有很多来自其他系统的电子邮件,在Gmail中显示为HTML.
有人能指出我显示我失踪的规格吗?我需要创建特殊标题吗?
谢谢
代码如下所示:
Message message = new MimeMessage(session);
Multipart multiPart = new MimeMultipart("alternative");
try {
MimeBodyPart textPart = new MimeBodyPart();
textPart.setText(text, "utf-8");
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(html, "text/html; charset=utf-8");
multiPart.addBodyPart(htmlPart);
multiPart.addBodyPart(textPart);
message.setContent(multiPart);
if(from != null){
message.setFrom(new InternetAddress(from));
}else
message.setFrom();
if(replyto != null)
message.setReplyTo(new InternetAddress[]{new InternetAddress(replyto)});
else
message.setReplyTo(new InternetAddress[]{new InternetAddress(from)});
InternetAddress[] toAddresses = { new InternetAddress(to) };
message.setRecipients(Message.RecipientType.TO, toAddresses);
message.setSubject(subject);
message.setSentDate(new Date());
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
System.out.println("Error: "+e.getMessage());
} catch (MessagingException …Run Code Online (Sandbox Code Playgroud) 我正在研究Javamail是否是线程安全的,特别是在具有与不同用户相对应的许多会话,多个SMTP服务器以及创建MIME消息和使用transport.sendMessage方法的情况下.我知道Javamail面向桌面使用,这让我怀疑它可能没有考虑到线程构建,我想知道是否有人有这样的经验.
我使用javax.mail在Java中发送邮件.既然我的项目概念的一部分发生了变化,我必须发送邮件而不进行身份验证.我将不得不改变我的createSession()方法:
private void createSession() {
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", server);
properties.put("mail.smtp.port", port);
session = Session.getInstance(properties, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
}
Run Code Online (Sandbox Code Playgroud)
这是相当明显的是,我应该换mail.smtp.auth到false,但我还需要改变?
jakarta-mail ×10
java ×9
smtp ×3
mime ×2
mime-types ×2
android ×1
dependencies ×1
email ×1
encoding ×1
gmail ×1
groovy ×1
html-email ×1
javax.mail ×1
multipart ×1
tomcat ×1
velocity ×1