标签: jakarta-mail

使用Javamail连接到Gmail smtp服务器会忽略指定的端口并尝试使用25

我正在尝试在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)

java groovy gmail smtp jakarta-mail

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

如何将MimeBodyPart ContentType设置为"text/html"?

下面的程序显示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)

java mime jakarta-mail mime-types

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

javamail将gmail消息标记为已读

注意:回答后添加:谢谢..是的,我曾尝试过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)

java jakarta-mail

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

java.lang.NoClassDefFoundError:javax/mail/Authenticator,怎么回事?

发送到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)

java jakarta-mail

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

此类文件的Jar属于容器'Android Dependencies',它不允许修改其条目上的源附件

我正在制作一个电子邮件应用程序,它在这个问题的标题中给出错误.我该如何解决这个问题?我正在给我的代码截图,如果它有助于找到解决方案.

在此输入图像描述

dependencies android jakarta-mail

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

使用JavaMail在电子邮件中内嵌图像

我想使用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在电子邮件中内联发送图像?

java mime multipart jakarta-mail mime-types

29
推荐指数
3
解决办法
7万
查看次数

发送电子邮件时主题编码问题

我正在发送一封电子邮件,但我正确地收到了该邮件,但该主题的编码不正确.我发送"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)

谢谢

java google-app-engine encoding velocity jakarta-mail

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

最佳实践 - 发送javamail mime多部分电子邮件 - 和gmail

我有一个需要发送确认电子邮件等的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)

java tomcat smtp jakarta-mail html-email

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

Javamail中的Threadsafety

我正在研究Javamail是否是线程安全的,特别是在具有与不同用户相对应的许多会话,多个SMTP服务器以及创建MIME消息和使用transport.sendMessage方法的情况下.我知道Javamail面向桌面使用,这让我怀疑它可能没有考虑到线程构建,我想知道是否有人有这样的经验.

java multithreading smtp jakarta-mail

26
推荐指数
1
解决办法
7355
查看次数

无需身份验证即可在javax.mail中发送邮件

我使用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.authfalse,但我还需要改变?

java email authentication jakarta-mail javax.mail

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