我们收到了正确数量的已删除邮件。但从gmail帐户中,邮件不会被删除。expunge()方法不适用于pop3。pop3是否有类似的方法永久删除电子邮件?我们还设置了文件夹。关闭(真)
代码如下-
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.FetchProfile;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.URLName;
import javax.mail.internet.ContentType;
import javax.mail.internet.ParseException;
import com.sun.mail.imap.protocol.FLAGS;
import com.sun.mail.pop3.POP3SSLStore;
public class GmailUtilities {
private Session session = null;
private Store store = null;
private String username, password;
private Folder folder;
public GmailUtilities() {
}
public void setUserPass(String username, String password) {
this.username = username;
this.password = password;
}
public void connect() throws Exception {
String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
Properties pop3Props = new Properties();
pop3Props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);
pop3Props.setProperty("mail.pop3.socketFactory.fallback", "false");
pop3Props.setProperty("mail.pop3.port", "995");
pop3Props.setProperty("mail.pop3.socketFactory.port", "995");
URLName url = new URLName("pop3", "pop.gmail.com", 995, "",
username, password);
session = Session.getInstance(pop3Props, null);
store = new POP3SSLStore(session, url);
store.connect(); //uses session properties
}
public void openFolder(String folderName) throws Exception {
// Open the Folder
folder = store.getDefaultFolder();
folder = folder.getFolder(folderName);
if (folder == null) {
throw new Exception("Invalid folder");
}
// try to open read/write and if that fails try read-only
try {
folder.open(Folder.READ_WRITE);
} catch (MessagingException ex) {
folder.open(Folder.READ_ONLY);
}
}
public void closeFolder() throws Exception {
folder.close(false);
}
public int getMessageCount() throws Exception {
return folder.getMessageCount();
}
public void printAllMessages() throws Exception {
// Attributes & Flags for all messages ..
Message[] msgs = folder.getMessages();
// Use a suitable FetchProfile
FetchProfile fp = new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
folder.fetch(msgs, fp);
for (int i = 0; i < msgs.length; i++) {
System.out.println("--------------------------");
System.out.println("MESSAGE #" + (i + 1) + ":");
dumpPart(msgs[i]);
msgs[i].setFlag(FLAGS.Flag.DELETED, true);
System.out.println("Message " +(i+1)+" is deleted");
}
folder.close(true);
}
public static void dumpPart(Part p) throws Exception {
if (p instanceof Message)
dumpEnvelope((Message)p);
Object content = p.getContent();
System.out.println(content);
String ct = p.getContentType();
try {
pr("CONTENT-TYPE: " + (new ContentType(ct)).toString());
} catch (ParseException pex) {
pr("BAD CONTENT-TYPE: " + ct);
}
/*
* Using isMimeType to determine the content type avoids
* fetching the actual content data until we need it.
*/
if (p.isMimeType("text/plain")) {
pr("This is plain text");
pr("---------------------------");
System.out.println((String)p.getContent());
} else {
// just a separator
pr("---------------------------");
}
}
public static void dumpEnvelope(Message m) throws Exception {
pr(" ");
Address[] a;
// FROM
if ((a = m.getFrom()) != null) {
for (int j = 0; j < a.length; j++)
pr("FROM: " + a[j].toString());
}
// TO
if ((a = m.getRecipients(Message.RecipientType.TO)) != null) {
for (int j = 0; j < a.length; j++) {
pr("TO: " + a[j].toString());
}
}
// SUBJECT
pr("SUBJECT: " + m.getSubject());
// DATE
Date d = m.getSentDate();
pr("SendDate: " +
(d != null ? d.toString() : "UNKNOWN"));
}
static String indentStr = " ";
static int level = 0;
/**
* Print a, possibly indented, string.
*/
public static void pr(String s) {
System.out.print(indentStr.substring(0, level * 2));
System.out.println(s);
}
public static void main(String[] args) {
try {
GmailUtilities gmail = new GmailUtilities();
gmail.setUserPass("abc@gmail.com","password");
gmail.connect();
gmail.openFolder("INBOX");
int totalMessages = gmail.getMessageCount();
System.out.println("Total messages = " + totalMessages);
gmail.printAllMessages();
} catch(Exception e) {
e.printStackTrace();
}
}
}
可能与您的问题无关,但您可能希望阅读以下常见JavaMail错误列表。
至于为什么邮件没有被删除,我不知道。确保您真的打开了读/写文件夹。协议跟踪可能会提供一些关于实际情况的线索。
问题内容: 我正在尝试在JavaMail API的帮助下通过IMAP访问来自Gmail帐户的电子邮件。我想知道为什么代码对一个电子邮件帐户有效,而对另一个电子邮件帐户无效。 我可以访问两个电子邮件帐户的文件夹。但是对于其中一个电子邮件帐户,无法访问其他文件夹,例如,它将引发异常。有人可以解释出什么问题了吗? 先感谢您。 这是代码: 问题答案: 是否有一个帐户使用非英语用户界面? Gmail文件夹名
问题内容: 我正在使用javamail,但无法从Gmail电子邮件中获取HTML。我有以下内容: 上面所有方法都可以,但是我无法打印或获取实际的HTML或文本电子邮件。我只是得到某种InputStream,如何轻松处理以获得原始的电子邮件HTML? 我也尝试遍历消息,但这并没有使我走得太远: } 谢谢大家的帮助。 问题答案: 该对象包含电子邮件的正文。您需要阅读整个流,才能阅读整个消息。例如,该S
我有一个web应用程序,目前可以从gsuite域中的“无回复”式电子邮件地址发送自动密码重置电子邮件。目前,它只需通过SMTP(使用TLS)使用用户名和密码即可工作,然而,为了实现这一点,GSuite管理员(不是我)必须启用LSA。 我相信大多数人都知道,谷歌将在明年逐步淘汰它,所以展望未来,我将不得不使用OAuth2和Gmail应用编程接口(我想)。我对这一点还很陌生,所以原谅我的无知,但是虽然
我正在尝试从应用程序发送电子邮件。 问题是Gmail不允许我进行身份验证,因为位置不寻常——当然,每个应用程序都安装在其他位置。 我的代码(使用Javax): 该代码在我的测试设备上运行良好,但在其他使用我的应用程序的设备上崩溃。 我得到的错误:javax.mail.身份验证失败异常:534-5.7.14请通过534-5.7.14您的网络浏览器登录,然后重试。534-5.7.14在534 5.7.
我正在尝试使用JavaMail 1.6.2使用带有POP3和新的OAUTH2集成的守护进程服务从outlook.com中提取电子邮件。 我已经成功地使用OAUTH2和IMAPS进行了身份验证,并且我可以使用带有普通身份验证的POP3来提取电子邮件,因此我认为我的OAUTH2作用域、azure注册应用程序和客户端电子邮件都有正确的设置。 我正在使用的提取电子邮件的范围如下所示,返回的令牌反映了POP
我成功通过passportjs验证,但NodeEmailer只发送一封电子邮件,这是控制台中使用的一封电子邮件。云谷歌。 当我尝试其他gmail帐户时,我得到这个错误: 错误:无效登录:535-5.7.8不接受用户名和密码。在535 5.7.8了解更多信息https://support.google.com/mail/?p=BadCredentialsu6sm13346885wrp。0-SMTPC