MIME邮件发件人以以下格式显示:
"John Doe" <johndoe@gmail.com>
<johndoe@gmail.com>
我试图找出如何提取字符串&#34; johndoe@gmail.com"在上面的例子中,虽然我也需要&#34; johndoe&#34;和&#34; gmail.com&#34;部分(根据RFC I&#39;我非常确定@
上的分裂是从这里需要的所有内容)。显然,对我自己的解析器进行正则化是一个(不是很好的)选项。
似乎可以使用javax.mail.internet.MimeMessage
来实现这一点。所有构造函数都需要Folder
我没有(好吧,我有点做,它存在于IMAP层中),例如。
MimeMessage(Folder folder, InputStream is, int msgnum)
这让我觉得我错误地使用这个课程。尽管如此,如果我以这种方式解析,我可以访问getFrom()
方法,该方法返回Address
数组,它本身并不提供使用方法。
使用mime4j很容易实现这一点:
case T_FIELD: // field means header
if(token.getName() == "from") {
// get raw string as above - unparsed
因此,使用mime4j或使用java,javax等实用程序,应该可以提取&#34; a@b.com"那里的部分地址,但是我还没有在javax或mime4j中找到一个对此负责的课程。
答案 0 :(得分:2)
我认为你需要来自javax.mail的InternetAddress类: http://docs.oracle.com/javaee/6/api/javax/mail/internet/InternetAddress.html#getAddress()
最低工作示例:
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
public class JavaMailExample {
public static void main(String[] args) throws AddressException {
String fullemail = "\"John Doe\" <johndoe@gmail.com>";
InternetAddress addr = new InternetAddress(fullemail);
System.out.println(addr.getPersonal()); // John Doe
System.out.println(addr.getAddress()); // johndoe@gmail.com
}
}