使用Java处理原始电子邮件数据

使用Java处理原始电子邮件数据,java,string,email,raw-data,Java,String,Email,Raw Data,我有一个数据库存储原始电子邮件内容。我的要求是从数据库中获取单个邮件,并处理这些数据,以获取特定邮件的基本细节(如发件人、收件人、主题等),还需要使用核心Java获取保存到文件系统的所有附件。目前,我能够以字符串形式从DB中获取原始电子邮件数据,但无法处理该数据 如何使用Java处理此原始电子邮件数据(字符串数据类型) 编辑: 在DB级别,数据存储为NCLOB。从数据库获取数据后,它将被存储为Java字符串数据类型 电子邮件数据示例如下: Return-Path: <support.bpm

我有一个数据库存储原始电子邮件内容。我的要求是从数据库中获取单个邮件,并处理这些数据,以获取特定邮件的基本细节(如发件人、收件人、主题等),还需要使用核心Java获取保存到文件系统的所有附件。目前,我能够以字符串形式从DB中获取原始电子邮件数据,但无法处理该数据

如何使用Java处理此原始电子邮件数据(字符串数据类型)

编辑:
在DB级别,数据存储为NCLOB。从数据库获取数据后,它将被存储为Java字符串数据类型

电子邮件数据示例如下:

Return-Path: <support.bpm@mydomain>
Delivered-To: faxhealthuat@mydomain.com
Received: from naplmailer2.com (unknown [172.25.3.5])
    by mail3.mydomain.com (Postfix) with ESMTP id 46E6572049B
    for <faxhealthuat@mydomain.com>; Tue, 23 Feb 2016 15:16:43 +0530 (IST)
DKIM-Signature: v=1; a=rsa-sha256; d=mydomain; s=sms2; c=relaxed/simple;
    q=dns/txt; i=@mydomain; t=1456220806; x=1458812806;
    h=From:Sender:Reply-To:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:
    Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From:
    Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id:
    List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive;
    bh=K7Tc1XHEFN5ey8WU6/HXHF9XYDMLCiIsVdU7DloptqI=;
    b=CEnhtyGSQi+08wghYzKjW61JpO/IqOCgjopdCaesEfRgdeu86BWTQ9ZV0G7mCkDz
    XChXBhzNsj+uST6yiu7ivYsCBqKvBAnyaoUvLSUw5rWAuCNlg1gdP1ilEzFnZZBB
    6U25CK64N81I5cKCdltgmUe5B97XueIV8M8LjhyemxM=;
X-AuditID: 7370fb5c-f79a16d000001484-b0-56cc2a86383c
Received: from CHNMURROOTCAS2.murugappa.com ( [172.25.1.14])
    by naplmailer2.com (Symantec Messaging Gateway) with SMTP id 8B.42.05252.68A2CC65; Tue, 23 Feb 2016 15:16:46 +0530 (IST)
Received: from CHNMURROOTMBX2.murugappa.com ([fe80::a141:6b81:60c9:125c]) by
 CHNMURROOTCAS2.murugappa.com ([fe80::fc6b:b33c:6d4f:fadd%12]) with mapi id
 14.03.0210.002; Tue, 23 Feb 2016 15:16:40 +0530
From: Support-BPM-CholaMS <support.bpm@mydomain>
To: "faxhealthuat@mydomain.com" <faxhealthuat@mydomain.com>
Subject: Test From Mail
Thread-Topic: Test From Mail
Thread-Index: AdFuHx8uv6VR8hDtQvKILSCahVrrMg==
Date: Tue, 23 Feb 2016 09:46:39 +0000
Message-ID: <B8C5C607CDD50E4D84DACA129D4CFD64C7299C49@CHNMURROOTMBX2.murugappa.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-originating-ip: [10.111.10.60]
Content-Type: multipart/alternative;
    boundary="_000_B8C5C607CDD50E4D84DACA129D4CFD64C7299C49CHNMURROOTMBX2m_"
MIME-Version: 1.0
X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprMKsWRmVeSWpSXmKPExsWyRpKRT7dN60yYwe2HihYvDps7MHqs73jD
    GsAY1cBok5iXl1+SWJKqkJJanGyr5JJZnJyTmJmbWqSQll+k4JyRn5Oo4BuspJCZYqtkqqRQ
    kJOYnJqbmldiq5RYUJCal6Jkx6WAAWyAyjLzFFLzkvNTMvPSbZU8g/11LSxMLXUNlexcPIOd
    fRw9fV2DFPz8E7ayZjx+spe54LdqxeLPS9kbGBcodzFyckgImEicOvSNFcIWk7hwbz1bFyMX
    h5DAdkaJdcd3QjmnGSU+z17PCFLFJmArseJgM5gtIuAocezPNxYQW1hAXGLdxFesEHEZieWH
    l0DZehLnzl5lA7FZBFQljhzoZQaxeQWCJW7seAZWwwi0+fupNUwgNjPQnFtP5jNBXCQgsWTP
    eWYIW1Ti5eN/UJcqSLR+PwUU5wCqz5fY8cEYYqSgxMmZT1gmMArNQjJpFkLVLCRVECU6Egt2
    f2KDsLUlli18zQxjnznwmAlZfAEj+ypG/rzEgpzcxMyc1CIjveT83E2MwJgvLvgds4Px00+n
    Q4wCHIxKPLzLG06HCbEmlhVX5h5ilOBgVhLhdeA7EybEm5JYWZValB9fVJqTWnyI0QcYIhOZ
    pUST84HpKK8k3tDI3MzQzMTY0NDc2BKHsJI4b6v84TAhgXRgaspOTS1ILYIZx8TBKdXAWDgr
    40nv+6kRyxcq/0qx//f+zokw3qrXR/M3XLflqeaaHnpi6YXDN39mzZhiMLv6DceSuWerT1xS
    SrXbcnaX/LOcj/pu9XFreqSf3lJ9lfYpY/3x2BW/+wofCb7749Fzfv3j/emHsy6/eO+X4LGs
    /4fGYpbrB0733TjNmyKzQWnjBP93PfbzFnEqsRRnJBpqMRcVJwIArc+Y8CYDAAA=

--_000_B8C5C607CDD50E4D84DACA129D4CFD64C7299C49CHNMURROOTMBX2m_
Content-Type: text/plain; charset="us-ascii"
content-transfer-encoding: quoted-printable

Testing for from mail fetch

--_000_B8C5C607CDD50E4D84DACA129D4CFD64C7299C49CHNMURROOTMBX2m_
Content-Type: text/html; charset="us-ascii"
content-transfer-encoding: quoted-printable
--_000_B8C5C607CDD50E4D84DACA129D4CFD64C7299C49CHNMURROOTMBX2m_--
返回路径:
交付给:faxhealthuat@mydomain.com
收到:来自naplmailer2.com(未知[172.25.3.5])
通过mail3.mydomain.com(Postfix),ESMTP id为46E6572049B
对于2016年2月23日星期二15:16:43+0530(IST)
DKIM签名:v=1;a=rsa-sha256;d=mydomain;s=sms2;c=放松/简单;
q=dns/txt;i=@mydomain;t=1456220806;x=1458812806;
h=From:Sender:Reply To:Subject:Date:Message ID:To:Cc:MIME版本:内容类型:
内容传输编码:内容ID:内容描述:重新发送日期:重新发送自:
重新发送发件人:重新发送至:重新发送抄送:重新发送邮件ID:回复:引用:列表ID:
列表帮助:列表取消订阅:列表订阅:列表发布:列表所有者:列表存档;
bh=K7Tc1XHEFN5ey8WU6/HXHF9XYDMLCiIsVdU7DloptqI=;
b=CEnhtyGSQi+08wghYzKjW61JpO/IqOCgjopdCaesEfRgdeu86BWTQ9ZV0G7mCkDz
XChXBhzNsj+UST6YIU7IVYSCBQKVBANYAOUUVLSUW5RWAUCNLG1GDP1ILEZBNZBB
6U25CK64N81I5cKCdltgmUe5B97XueIV8M8LjhyemxM=;
X-AUDID:7370fb5c-f79a16d000001484-b0-56cc2a86383c
收到:来自CHNMURROOTCAS2.murugappa.com([172.25.1.14])
通过naplmailer2.com(赛门铁克消息网关)发送,SMTP id为8B.42.05252.68A2CC65;2016年2月23日星期二15:16:46+0530(IST)
收到:从CHNMURROOTMBX2.murugappa.com([fe80::a141:6b81:60c9:125c])收到
CHNMURROOTCAS2.murugappa.com([fe80::fc6b:b33c:6d4f:fadd%12]),具有mapi id
14.03.0210.002; 2016年2月23日星期二15:16:40+0530
发件人:支持BPM CholaMS
至:faxhealthuat@mydomain.com" 
主题:邮件测试
线程主题:邮件测试
螺纹索引:AdFuHx8uv6VR8hDtQvKILSCahVrrMg==
日期:2016年2月23日星期二09:46:39+0000
消息ID:
接受语言:en US
内容语言:en US
X-MS-Has-Attach:
X-MS-TNEF-相关器:
x-ip:[10.111.10.60]
内容类型:多部分/备选;
边界=“_000_B8C5C607CDD50E4D84DACA129D4CFD64C7299C49CHNMURROOTMBX2m”
MIME版本:1.0
X-Brightmail-Tracker:H4Siaaaaaaaa+NgFprMKsWRmVeSWpSXmKPExsWyRpKRT7dN60yYwe2HihYvDps7MHqs73jD
GsAY1cBok5iXl1+SWJKQKJJANGYR5JZNJYTMJMBWQSQLL+k4JyRn5Oo4BuspJCZYqtkqqRQ
kJOYnJqbmldiq5RYUJCal6Jkx6WAAWyAyjLzFFLzkvNTMvPSbZU8g/11LSXMLXUNLEXCPOID
fRw9fV2DFPz8E7ayZjx+spe54LdqxeLPS9kbGBcodzFyckgImEicOvSNFcIWk7hwbz1bFyMX
H5DADKADCD3QJMNGSU+z17PCFLFJmArseJgM5gtIuAocezPNxYQW1hAXGLdxFesEHEZieWH
l0DZehLnzl5lA7FZBFQljhzoZQaxeQWCJW7seAZWwwi0+fupNUwgNjPQnFtP5jNBXCQgsWTP
eWYIW1Ti5eN/UJcqSLR+PWUUU5WCQZ5FY8CEYYQSGXMMZT1GMARNQJJPFKLVLCCRVECU6EGT2
f2KDsLUlli18zQxjnznwmAlZfAEj+ypG/RZEGPZCxMYC1CIVET83E2MWJGVGDS4PX00+n
Q4WCHIXKPLZLG06HCBEMLHVX5H5ILOBGVHLHEADA7EYBEM5JYWZVALB9FVJQTWnYI0QCYIHOZ
pUST84HpKK8k3tDI3MzQzMTY0NDc2BKHsJI4b6v84TAhgXRgaspOTS1ILYIZx8TBKdXAWDgr
40nv+6kRyxcq/0qx//f+zokw3qrXR/M3XLflqeaaHnpi6YXDN39mzZhiMLv6DceSuWerT1xS
SrXbcnaX/LOcj/pu9XFreqSf3lJ9lfYpY/3x2BW/+wofCb7749Fzfv3j/emHsy6/eO+X4LGs
/4FGYPBRB073TJNMYKZQWNJBP93PFBZFNEQSRRNJBPQMRCVJWIARC+Y8CYDAAA=
--_000_B8C5C607CDD50E4D84DACA129D4CFD64C7299C49CHNMURROOTMBX2m_
内容类型:文本/纯文本;charset=“us ascii”
内容传输编码:引用可打印
从邮件获取中测试
--_000_B8C5C607CDD50E4D84DACA129D4CFD64C7299C49CHNMURROOTMBX2m_
内容类型:text/html;charset=“us ascii”
内容传输编码:引用可打印
--_000_B8C5C607CDD50E4D84DACA129D4CFD64C7299C49CHNMURROOTMBX2m_--

假设正在获取的字符串包含新行分隔符

String rawEmail = "YOUR EMAIL CONTENTS";
String [] lines =  rawEmail.split("\\r?\\n");
Map<String, String> attributes = new HashMap<>();
for(String line : lines)
{
    String [] tokens = line.split(":");
    if(!tokens[0].isEmpty()) 
    {
        attributes.put(tokens[0].trim(), tokens[1].isEmpty()? null : tokens[1].trim());
    }
}
String rawmail=“您的电子邮件内容”;
字符串[]行=rawmail.split(\\r?\\n”);
Map attributes=newhashmap();
用于(字符串行:行)
{
String[]tokens=line.split(“:”);
如果(!令牌[0].isEmpty())
{
attributes.put(令牌[0].trim(),令牌[1].isEmpty()?null:令牌[1].trim());
}
}

嵌套属性的进一步处理将以相同的方式进行

如果要解析电子邮件,只需知道电子邮件的格式即可。这曾在RFC822中定义,被RFC2822淘汰,被RFC5322淘汰。您应该先阅读这些文档,然后选择要处理的部分

在最高级别,由行组成的消息。这些行应以
\r\n
(CrLf)终止,但您不应依赖于此,因为您无法从DB获取消息,而不知道是否已进行任何预处理。首先是页眉(包含页眉行),可选的是用空行与页眉分开的主体

标题行或形式为
Header\u NAME:Header\u VALUE
,其中标题名称不得以空格开头。在标题部分中,任何以空格开头的行都是续行,必须连接到前一行的值


有关更多详细信息,请参阅。

好吧,在根据您的回答和评论做了一些研究之后,我得到了我需要的。谢谢大家的努力

这里也一样。下面的Java方法将从数据库获取电子邮件原始数据,查找电子邮件数据中包含的所有附件并将其保存到文件系统,最后返回成功或失败消息

public static String saveAttachments(String EMAIL_ID)
{
    try
    {
        String saveDirectory = "C:\\Email\\Attachements\\";

        //Get email record from DB
        EMAIL newEMAILObj = EMAIL.getEmailDetailsForEmailId(EMAIL_ID);

        //Get email raw data into a String variable
        String emailRawData = newEMAILObj.getCONTENT();

        Session newSession = Session.getDefaultInstance(new Properties());
        InputStream inputStreamObj = new ByteArrayInputStream(emailRawData.getBytes());
        MimeMessage mimeMessageObj = new MimeMessage(newSession, inputStreamObj);
        String contentType = mimeMessageObj.getContentType();

        if (contentType.contains("multipart")) //Content may contain attachments
        {
            Multipart multiPart = (Multipart) mimeMessageObj.getContent();
            int numberOfParts = multiPart.getCount();
            for (int partCount = 0; partCount < numberOfParts; partCount++)
            {
                MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
                if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) //This part is an attachment
                {
                    File file = new File(saveDirectory+part.getFileName());
                    part.saveFile(file);
                }
            }
        }
    }
    catch (MessagingException ex) 
    {
        return "FAILED: "+ex.getLocalizedMessage();
    }
    catch (IOException ex)
    {
        return "FAILED: "+ex.getLocalizedMessage();
    } 
    return "SUCCESS";
}
公共静态字符串保存附件(字符串电子邮件\u ID)
{
尝试
{
String saveDirectory=“C:\\Email\\Attachements\\”;
//从数据库获取电子邮件记录
EMAIL newEMAILObj=EMAIL.getEmailDetailsForEmailId(EMAIL\u ID);
//得到e