簡體   English   中英

使用Java處理原始電子郵件數據

[英]Processing a Raw Email Data using Java

我有一個存儲原始電子郵件內容的數據庫。 我的要求是從數據庫中獲取單個郵件,並處理該數據以獲取特定電子郵件的基本詳細信息(例如FROM,TO,SUBJECT等。),並使用Core將所有附件保存到文件系統中Java。 目前,我能夠以字符串的形式從數據庫中獲取原始電子郵件數據,但無法處理該數據。

如何使用Java處理此原始電子郵件數據(字符串數據類型)?

編輯:在數據庫級別中,數據存儲為NCLOB。 從數據庫中獲取數據后,然后將其存儲為Java String數據類型。

電子郵件數據示例為:

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_--

假設您要提取的字符串包含新行分隔符

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());
    }
}

嵌套屬性的進一步處理將以相同的方式進行

好吧,如果您想解析電子郵件,則只需要知道電子郵件的格式即可。 它曾經在RFC822中定義,由RFC2822過時,由RFC5322過時。 您應該先閱讀這些文檔,然后選擇要處理的文檔的哪一部分。

在最高級別,由行組成的消息。 這些行應以\\r\\n (CrLf)終止,但是您不應依賴於此,因為您是從數據庫中獲取消息而又不知道是否進行了任何預處理。 首先是標題(包含標題行),然后是一個可選的主體,該主體與標題之間用空行分隔。

標題行或格式為HEADER_NAME:HEADER_VALUE的標題行不能以空格開頭。 在標題部分中,任何以空格開頭的行都是連續行,並且必須與前一行的值連接。

有關更多詳細信息,請參閱RFC 5322

好吧,在根據您的回答和評論進行了一些研究之后,我得到了我所需要的。 謝謝大家的努力。

只是在這里分享。 下面的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";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM