李杰,李瑞瑞
(1.同方知網(北京)技術有限公司,北京100192;2.北京因擎科技有限責任公司,北京100081)
目前,許多崗位在實際工作中需要進行郵件的“點對點”發送。郵件“點對點”發送要求一個發件人(即一個“點”)向一個收件人(即另外一個“點”)進行直接發送,在收件人處看到的效果即是發件人單獨給收件人發送一封郵件。在實際工作中,“點對點”郵件發送是一“點”對多“點”的郵件發送,即一位發件人常常需要向成百上千個收件人發送郵件。
如果需要“點對點”發送的郵件內容和附件不變,以上的要求利用常用電子郵箱的“群發單顯”功能即可實現,以網易126郵箱為例,見圖1。發件人直接利用郵箱自身的功能即可實現。

在時需要“點對點”發送的郵件沒有攜帶附件,但郵件正文中出現多處內容需要進行個性化處理。以編輯部向投稿人批量發送收稿通知為例,如圖2所示。

圖2 郵件正文多處內容需要個性化處理示意圖
在這種情況下,可以利用Microsoft Word軟件中的“郵件合并”功能進行設置并發送,見圖3。

注:圖中“??”包含的灰色部分為利用“郵件合并”功能后自動添加的“域”,即在每封郵件中可以變動的部分
其中成為域的“作者姓名”項和“文章題目”項事先存放在Microsoft Excel文件中,見圖4。

圖4 存放在Microsoft Excel文件中的“作者姓名”、“收件人郵箱”和“文章題目”項列表
郵件預覽結果見圖5。

注:灰色部分為域。
在以下兩種情況,需要“點對點”發送的郵件利用電子郵箱或者Microsoft Word“郵件合并”功能均無法實現:①除收件人郵箱外有其他個性化字段且攜帶相同附件,②不論是否有個性化字段,但需要攜帶不同附件。為此,筆者利用Mi?crosoft Excel的VBA語言 結 合Microsoft Outlook設計了一個基于Microsoft Excel的郵件群發系統,可以解決以上兩個需求。
郵件群發系統建立在一個啟用宏的Microsoft Excel文檔中,后綴名為.xlsm。該系統交互界面包括1個窗體和2個工作表,即“發送記錄”工作表、“后臺”工作表。
郵件群發系統的窗體是郵件各項參數的設置和郵件內容的預覽界面,利用在Microsoft Excel中插入窗體實現,見圖6。窗體主要分為“設置框架”(綠色虛線區域)和“預覽框架”(紅色虛線區域)2個部分。在“設置框架”中,用戶需要選擇發送日期、所使用的發件箱、郵件是否帶有附件以及相應的固定部分名稱后,即可在“預覽框架”中預覽相應的郵件主題與正文。

圖6 郵件群發系統的窗體
(1)“發送日期”列表框。需要用戶點擊選擇發送日期,此列表的數據來源為“發送記錄”工作表A列“發送日期”,需要用戶事先填寫,見圖7。

圖7 郵件群發系統的“發送記錄”工作表
(2)郵件數量顯示區域。在用戶點擊選擇發送日期后會自動顯示所選發送日期下的郵件數量,用戶無需操作。
(3)“發件箱”列表框。其列出的郵箱為本機Microsoft Outlook中已經添加的賬戶信息,因此在發送郵件前需要用戶事先在Microsoft Outlook中添加郵箱賬戶,并且在發送郵件前選擇所用的發件箱。
(4)附件選擇區域。用戶根據所發郵件內容可以選擇是否攜帶附件,如果用戶選擇選項“有”,則系統會根據用戶所選發送日期檢查附件路徑是否正確,附件路徑信息存放在“發送記錄”工作表C列“附件路徑”,需要用戶事先填寫,見圖7。
(5)固定部分內容設置區域。其中“固定部分名稱”列表框中顯示用戶已經保存的固定部分名稱,其數據來源為“后臺”工作表A列“名稱”,見圖8?!氨4妗卑粹o可以將用戶在下方預覽框輸入的固定部分內容保存到“后臺”工作表;“清空”按鈕可以清空下方預覽框中的固定部分內容,用于重新輸入固定部分內容;“刪除”按鈕可以從“后臺”工作表中刪除保存的固定部分內容,刪除后,“固定部分名稱”列表框會刷新。

圖8 郵件群發系統的“后臺”工作表
紅色底色區域為固定部分預覽區域,藍色底色區域為可變部分預覽區域。其中,固定部分預覽區域包括郵件主題、稱呼前綴、固定字段1、固定字段2、固定字段3、固定字段4和簽名,分別對應“后臺”工作表C~I列的數據,見圖8??勺儾糠诸A覽區域包括收件人姓名、可變字段1、可變字段2、可變字段3、可變字段4,分別對應“發送記錄”工作表D~H列的數據,且僅預覽符合發送日期的第一條數據,見圖8。固定部分和可變部分按照以下順序依次連接共同組成了郵件的主題和正文部分:稱呼前綴→收件人姓名→固定字段1→可變字段1→固定字段2→可變字段2→固定字段3→可變字段3→固定字段4→可變字段4→簽名,以“2021年度調薪方案為例”,見圖9。

圖9 2021年度調薪方案郵件示意圖
(6)“確定發送”按鈕。用戶點擊后則按照設置的發送日期、發件箱、附件以及選擇的固定字段在Microsoft Outlook中依次新建郵件對象并發送。
(7)“取消發送”按鈕。用戶點擊后退出交互界面,中止郵件發送。
“發送記錄”工作表用來存儲發送日期、收件人Email、附件路徑以及可變部分內容,包括收件人姓名和可變字段1~4,見圖8。其中,發送日期必須采用Microsoft Excel標準的日期數據錄入形式,可以采用Ctrl加“;”的組合鍵錄入;本系統中可供使用者設置0~4個可變字段,實際設置可變字段的個數并不會影響郵件發送。在此工作表中添加按鈕,并將按鈕“Caption”屬性改為“設置郵件發送”,見圖7。
“后臺”工作表用來存儲固定部分內容,包括名稱、保存時間、郵件主題、稱呼前綴、固定字段1~4、簽名,見圖8。其中,A列“名稱”表示固定部分名稱,由窗體⑤“固定部分名稱”列表框讀??;B列“保存時間”為用戶在窗體中點擊“保存”按鈕時的時間,僅供后臺存儲,窗體中不會顯示;C列“郵件主題”、D列“稱呼前綴”、E~H列“固定字段1~4”和I列“簽名”分別會被窗體中的固定部分預覽區域讀取。
此按鈕用于加載窗體“設置郵件并發送”,代碼如下:

3.2.1 檢測附件路徑函數與過程
首先自定義附件路徑函數FileFolderExists,用于檢測路徑下的文件是否存在,返回布爾值。代碼如下:

其次在用戶選擇發送日期后,調用上述函數逐行檢測所選發送日期下的郵件附件路徑是否正確或者為空白,若正確則可以選中選項“有”,若錯誤則提示錯誤并選中選項“無”,若空白則提示附件路徑未輸入。代碼如下:


3.2.2 窗體初始化事件過程
窗體初始化時要求在發送日期列表框中加載“發送記錄”工作表中A列用戶輸入的發送日期,并且去重后按照升序排列;要求在發件箱列表框加載本機Microsoft Outlook中已經添加的郵箱賬戶;要求在固定字段列表框中加載已經保存在“后臺”工作表中的A列名稱。代碼如下:



3.2.3 “發送日期”列表框單擊事件
此事件中,需要后臺記錄符合用戶選擇的發送日期的郵件數量并顯示在郵件數量顯示區域;在可變部分預覽區域顯示符合用戶選擇發送日期的第一條記錄的收件人姓名、可變字段1~4;若附件“有”按鈕被選中,則需要調用檢測附件路徑過程。代碼如下:


3.2.4 選項“是”單擊事件
此事件中,需要檢測用戶所選發送日期的郵件項目的附件路徑是否正確。代碼如下:

3.2.5 “固定部分名稱”列表框單擊事件
此事件中,需要在固定部分預覽區域顯示用戶選擇的固定部分名稱。代碼如下:

3.2.6 “保存”按鈕單擊事件
此事件中,需要將用戶在窗體固定部分預覽區域錄入的內容保存到“后臺”工作表中并刷新“固定部分名稱”列表框。代碼如下:


3.2.7 “清空”按鈕單擊事件
此事件中,需要將窗體下部固定部分預覽區域的內容清空,以便用戶直接輸入內容,方便下一步保存固定部分或者發送郵件。代碼如下:

3.2.8 “刪除”按鈕單擊事件
此事件中,需要將用戶已經選中的固定部分名稱整條數據從“后臺”工作表中刪除并且刷新“固定部分名稱”列表框。代碼如下:


3.2.9 “確定發送”按鈕單擊事件
此事件中,需要根據用戶選擇的發送日期、發件箱、是否攜帶附件、固定部分名稱,循環創建HTML郵件項目并發送郵件。代碼如下:


3.2.10 “取消發送”按鈕單擊事件
此事件中,需要關閉窗體,代碼如下:

筆者所開發的郵件群發系統具有以下特點:(1)自由選擇發件箱。用戶可以根據本地計算機Microsoft Outlook中已經添加的郵箱賬戶由用戶自由選擇發件箱。
(2)保留已發郵件記錄。用戶可以將需要發送郵件的可變部分內容一次性加入到“發送記錄”工作表中,提前設置發送時間,在發送時直接選取,并且發送后無需刪除已經發送的郵件,不僅操作更加便捷,而且保留發送記錄可以方便用戶后續查閱、跟進發送進度,追蹤客戶信息。
(3)即時顯示待發郵件數量。郵件數量顯示區域自動顯示所選發送日期下的郵件數量,在點擊不同發送日期時可以方便用戶即時查看。
(4)自由選擇是否攜帶附件并自動進行附件路經檢測。本系統可以實現用戶在一次發送中自選郵件是否攜帶附件,且若用戶選擇攜帶附件,則系統自動檢測附件路徑是否正確并給出提示。
(5)快速管理固定部分內容。窗體可以允許用戶通過“固定部分名稱”及右側“保存”、“刪除”、“清空”按鈕讀取、添加、刪除固定部分內容或下方的預覽框,可以讓用戶迅速找到已經發送過的郵件內容,不必重復錄入,也可以隨時添加固定部分內容用于后續發送,更加便捷地管理郵件內容。
(6)按需使用多個固定部分內容和可變部分內容。本系統目前分別設置了4個固定字段與可變字段,允許用戶在其中設置不同內容,基本能夠符合日常使用場景要求,并且可以任意選擇0~4個固定或者可變字段,在不需要使用時保留空白即可。需要注意的是,固定字段和可變字段的排列順序決定了郵件的正文,當固定字段或可變字段數量少于4個時,需要用戶優先使用靠前的固定字段與可變字段。
(7)通過HTML代碼設置郵件格式。本系統新建的郵件對象為HTML郵件,因此可以使用HTML語言對郵件的格式進行個性化設置,如利用“”表示段落,“”表示換行,“ ”表示空格,“”表示斜體,“”表示粗體等功能。另外需要注意,使用該系統發送郵件之前,需要用戶在Microsoft Outlook中添加郵箱賬戶后才可使用;Microsoft Outlook發送郵件過程需要一定的時間,可在軟件界面狀態欄“發送/接收->顯示進度”查看發送進度[1]。
筆者設計的郵件群發系統可用于多種場景下的郵件批量發送,具有一定的通用性,希望能為廣大讀者工作帶來一定的幫助。