所謂「Mail Merge」就像是Windows Word的「合併列印」功能一樣。UFO Mailer 1.0 是國內唯一能夠做到「Mail Merge」的電子郵件發送軟體,這項功能特別適用於會員信或電子報類的應用。
「Mail Merge」讓您可以送出根據收信者量身訂作的信,每封信都是獨一無二,除了讓收信者備感貼心外,更能轉達許多重要的訊息。
舉例說明,讓您能更加了解為什麼「Mail Merge」是那麼地重要:
- 如果沒有Mail Merge功能,您必須要這樣寫信:
親愛的用戶:
您的會員資格將於近日到期,請盡速繳納會費,謝謝您的支持與合作。
- 如果有「Mail Merge」功能,您可以這樣寫:
親愛的王小明 先生:
您的會員資格將於七月五日到期,請於八月五日前繳納會費,謝謝您的支持與合作。
兩者一經比較,有了「Mail Merge」當然會讓信件更加清楚!
變數之型態與格式說明如下:
“*” 【#*變數名稱#】
這個特殊字元可用於置換內文中時常會異動的字串,使用的方法是在內文中適當的位置加入#*AAA#(AAA為變數名稱),然後在發電子報程式中的Mail
Merge設定的頁次中設定所要置換的值其格式為“AAA=聲源科技”。原始內文中此位置是“#*AAA#”但收信者看到的則是改為“聲源科技”了。
型態與格式 |
詳細說明 |
Date[,formatDt] | 產生出目前(送信的那一刻)的日期,可在後面加上格式。例如:想要將目前的日期顯示成 1999/01/15,則其格式須設成 #*Date,'yyyy/mm/dd'# |
Time[,formatDt] | 產生出目前(送信的那一刻)的時間,可在後面加上格式。例如:想要將目前時間顯示成 10:30AM,則其格式須設成 #*Time,'hh:mm AM/PM'# |
Now[,formatDt] | 產生出目前(送信的那一刻)的日期時間,可在後面加上格式。例如:想要將目前的日期時間顯示成 1999/01/15 星期五 pm01:27:34,則其格式須設成 #*Now,'yyyy/mm/dd dddd am/pmhh:nn:ss'# |
Random[,max][,min][,formatNum] | 產生一個亂數,從min到max之間。例如:格式設定為 #*random,,,'%d'#,則產生結果會是一亂數如 71441061 (每次產生出來的亂數都會不同),在此例子中,max及min不指定,則會被略過,而formatNum則要求用十進位產生出該數字。 |
Serial[,formatNum] | 產生一個流水號, 從1開始, 每封信自動加一。例如:格式設定為 #*Serial,'%.4x'#,如果流水號由1開始,則產生結果會是 0001 |
UserName | 產生出收信者名稱,例如:格式設定為 #*UserName#,則"abc@test.com"的產生結果為 abc |
Domain | 產生出收信者的網域名稱,例如:格式設定為 #*domain#,則"abc@test.com"的產生結果為 test.com |
ServerDomain[,ExcludeLevel] | 產生出目前郵件伺服器的網域名稱,此伺服器是您列出"可使用的郵件伺服器"之一或是與Domain相同(假如您直接送信)。 而ExcludeLevel則是要去掉網域名稱的頭, 以製造出稍微不同的機器名稱, 如#*ServerDomain,1#, 而server為"smtp.server.com", 則會得到"server.com" 您可以用類似machine1.#*ServerDomain,1#製造出網域相同但機器名不同的位址 |
所有變數之定義必須介於特殊符號 #*........#
當中,如:#*Date,'yy/mm/dd'#。您可針對個人的喜好自訂格式,設定的格式必須在單引號 '....' 或雙引號 "...." 當中。如果您不訂格式,則程式將會為您訂一預設的格式。
資料庫欄位之型態與格式說明如下:
“$”【#$欄位名稱#】
如果信件要配合資料庫來產生個人專屬的信件,請在適當的位置加入“#$Fieldname#”其中的Fieldname是資料庫裡的欄位名稱,“$”這個特殊字元後面是欄位的名稱,例如:如果有一個欄位名稱是name,網頁上的變數為#$name#,如果資料庫裡有確實的資料,則會置換成資料庫應有的值,如果資料裡此欄位沒有資料,則會置換成空字串(非空白)。而其他的字串變數較和資料無關。
欄位的輸出可指定其格式,說明如下:
#$DBField[,type][,format]#
DBField為資料庫任一欄位,可在後面加上格式,而 format 格式會依欄位型態的不同而設定以下形式:
型態與格式 |
說明 |
N[,formatNum] | 顯示數字欄位 |
F[,formatFloat] | 顯示浮點數(整數+小數)欄位 |
D[,formatDateTime] | 顯示日期時間欄位 |
C[,formatFloat] | 顯示金額欄位 (如:"$#,##0.00") |
B[,YesStr/NoStr] | 顯示邏輯欄位 (預設的顯示字串格式為‘yes/no’) |
R[,Val:NewVal] | 可置換欄位顯示的值 (例如:H:隱藏)其欄位的值為"H"但顯示出來的是"隱藏"這兩個字,但只可使用一組設定。 |
例如:有一資料庫欄位名是 "付款否",想要設定使用者是否已付款,則格式設定為 #$付款否,B,'已/未曾'#,"B"表示 boolean (邏輯型態),"已/未曾"則是它顯示的格式,以斜線符號作分隔。
所有資料庫欄位之定義必須介於特殊符號 #$........# 當中,如:#$Paid,B,'have/have not'#。您可針對個人的喜好自訂格式,設定的格式必須在單引號 '....'
或雙引號 "...."當中。如果您不訂格式,則程式將會為您訂一預設的格式。
特殊資料庫欄位值表示法:
#$!Replace(param1,param2,param3,......)#
例如:#$!Replace(amount,0:You have no money,'$#,##0.0')#
表示置換欄位amount的值所自訂的顯示字串,Replace為置換指令,amount為欄位名稱,'$#,##0.0'為顯示格式。上面例子表示若欄位amount有數值時,則數值會以'$#,##0.0'格式顯示,若欄位amount的數值是0時,則顯示'You have no money'的字串。
這個指令可使用多組參數,例如某一欄位的值可能為“1,2,3,4”,可設定為 (1:很好,2:好,3:尚好,4:差),如果它的值是1則顯示'很好',2顯示'好',3顯示'尚好',以此類推。
formatDt (日期時間類的格式) 說明如下:
formatDt | 顯示說明 |
c | 顯示日期,接著時間,如果分數部份的值是0,則時間不顯示,使用系統預設格式。 |
d | 以數字顯示日,前面沒有0 (如:1-31)。 |
dd | 以數字顯示日,前面有0 (如:01-31)。 |
ddd | 顯示星期的縮寫 (如:Sun-Sat) ,使用系統預設格式。 |
dddd | 顯示星期的全名 (如:Sunday-Saturday),使用系統預設格式。 |
ddddd | 顯示簡短的日期,使用系統預設格式。 |
dddddd | 顯示詳述的日期,使用系統預設格式。 |
m | 以數字顯示月份,前面沒有0 (如:1-12) 。如果m是緊跟著h或 hh出現,則m是表示分鐘而不是月份。 |
mm | 以數字顯示月份,前面有0。如果mm是緊跟著h或 hh出現,則mm是表示分鐘而不是月份。 |
mmm | 顯示月份的縮寫 (如:Jan-Dec) ,使用系統預設格式。 |
mmmm | 顯示月份的全名 (如:January-December),使用系統預設格式。 |
yy | 以2碼數字顯示年 (如:00-99)。 |
yyyy | 以4碼數字顯示年 (如:0000-9999)。 |
h | 顯示小時,前面沒有0 (如:0-23)。 |
hh | 顯示小時,前面有0 (如:00-23)。 |
n | 顯示分鐘,前面沒有0 (如:0-59)。 |
nn | 顯示分鐘,前面有0 (如:00-59)。 |
s | 顯示秒,前面沒有0 (如:0-59)。 |
ss | 顯示秒,前面有0 (如:00-59)。 |
t | 顯示簡短的時間,使用系統預設格式。 |
tt | 顯示詳述的時間,使用系統預設格式。 |
am/pm | 使用12小時制,前面有 h或 hh格式,'am' 表示中午以前,'pm' 表示中午以後,am/pm可用小寫、大寫或大小寫混合,顯示結果會依設定的大寫或小寫而定。 |
a/p | 使用12小時制,前面有 h或 hh格式,'a' 表示中午以前,'p' 表示中午以後,a/p可用小寫、大寫或大小寫混合,顯示結果會依設定的大寫或小寫而定。 |
ampm | 使用12小時制,前面有 h或 hh格式,ampm的內容使用系統預設格式。 |
/ | 顯示日期的分隔符號,使用系統預設格式。 |
: | 顯示時間的分隔符號,使用系統預設格式。 |
'xx'/"xx" | 包含在單引號或雙引號中的字串會直接顯示出來,它不會影響格式化 (如:引號內格式訂為 "I am smart",則顯示出來的字串即為 I am smart。 |
formatNum (數字類的格式) 的形式如下:
"%" ["-"] [寬度] ["." 精確度]
Type
它的形式由%開始,而接在%後面的中括弧內的指定格式是選擇性的,您可以指定,也可不指定它的格式,而最後面可能出現的數值型態(Type)說明如下:
Type | 顯示說明 |
d | 小數 (Decimal)。傳入引數必須是整數,數值會被轉換成小數點字串,如果字串含精確度的指定格式,則產生的結果字串至少必須包含指定精確度的位數;如果數值含較少的位數,則產生的結果字串左邊會補 0。 |
e | 科學數字 (Scientific)。傳入引數必須為浮點值,數值會被轉換成"-d.ddd...E+ddd"字串形式,產生的結果字串如果是負數則會有負號在前面,小數點前面一定會有一數字。 |
f | 固定數 (Fixed)。傳入引數必須為浮點值,數值會被轉換成"-ddd.ddd..."字串形式,產生的結果字串如果是負數則會有負號在前面。 |
g | 一般數字 (General)。傳入引數必須為浮點值,數值會被轉換成最短的可能字串 (引用固定數或科學數字格式), 精確度的指定格式會反應在產生的結果字串,產生的結果字串預設精確度到 15位。 |
n | 數字 (Number)。傳入引數必須為浮點值,數值會被轉換成"-d,ddd,ddd.ddd..."字串形式,"n"的格式相當於"f"格式,除非產生的結果字串含有上千個分隔符號。 |
m | 貨幣數字 (Money)。傳入引數必須為浮點值,數值會被轉換成貨幣金額的字串,它的轉換是使用系統預設格式,會因不同的操作系統而有所不同,如果字串內含精確度的指定格式,則數值會將系統預設的格式蓋過去。 |
s | 字串 (String)。傳入引數必須為字元或字串,產生結果字串的精確度會到指定的最大長度,如果傳入引數的字串長度超過最大長度,則字串會被截掉。 |
x | 十六進位數字 (Hexadecimal)。傳入引數必須為整數,數值會被轉換成16進位數字,如果字串內含精確度的指定格式,則產生結果字串至少必須包含指定精確度的位數,如果數值含較少位數,則產生的結果字串左邊會補 0。 |
注意:以上格式會隨系統的不同而稍有不同,例如:在中文操作系統上使用時,設定的格式會以中文顯示,而在英文操作系統上使用時,則設定的格式會以英文顯示。
Type 與 format (結合日期時間類與數字類的格式) 說明如下:
Type | format | 顯示說明 |
S | 字串 (String),此為預設格式。format省略。 | |
D | formatDt | 日期時間 (DateTime)。例如:'yy/mm/dd'。 |
N | formatNum | 數字 (Number)。例如:'%.4x'、'%d'、'%5.3f'等。 |
B | format | 邏輯 (Boolean)。例如:'Yes/No'、'是/否'、'作過/沒作過'等,如果是True則顯示Yes、是、作過;如果是False則顯示No、否、沒作過。 |
C | 貨幣 (Currency)。format省略。 |
製作郵件的樣版(Template)可使用一般的文書編輯器編輯成一般的文字檔,如果要讓使用者收到圖文並茂的信件可使用Outlook Express編輯成eml檔案。
需要注意的是介於『#』之間的字串,這些字串是由後端程式辨識後置放其他字串的變數。在第一個#號後緊接著都會有一個特殊字元如*、︿、$、%等等,最後以#結尾。
以下為 "MailSample.txt"(編信範例內容) 及 "Result.txt"(收件者所收到的信件內容) :
[MailSample.txt]From: you@#*domain#
To: #$EMail#
Subject: #*random,,,'%.4x'#測試郵件住址
MIME-Version: 1.0
Content-type: text/plain; charset=BIG5
Content-Transfer-Encoding: 8bit
#$姓名##$稱謂#您好:
您的會員資格將於#$到期日,d,'"西元"yyyy"年"mm"月"dd"日"'#到期,
應繳納NT$#$欠款,C#的會費,
告訴您一個小秘密,您的紅利積點是#$浮點數#,最近#$邏輯,B,'已/未曾'#吃過麥當勞,
郵件住址是#$EMail#,對不對?
如果錯誤的話,請來信告知。
現在時間:#*now,'dd/mm/yyyy dddd am/pmhh:nn:ss'#
[Result.txt]From: you@sparc4.cc.ncku.edu.tw
To: abc@sparc4.cc.ncku.edu.tw
Subject: 4FF72C18測試郵件住址
MIME-Version: 1.0
Content-type: text/plain; charset=BIG5
Content-Transfer-Encoding: 8bit
王小明先生您好:
您的會員資格將於西元1999年01月13日到期,
應繳納NT$530的會費,
告訴您一個小秘密,您的紅利積點是68,最近已吃過麥當勞,
郵件住址是chungho@sparc4.cc.ncku.edu.tw,對不對?
如果錯誤的話,請來信告知。
現在時間:15/05/2000 星期一 pm05:03:06
注意:一旦您編輯的格式有錯誤,測試結果的檔案中會出現訊息如:Format '%.2g' invalid or incompatible with argument。
使用「Mail Merge」的基本方法:
無論是用Outlook/Netscape或是內附的編信軟體,您只要打入: #$FieldName# ,就可以將資料庫中"FieldName"自動取代此一部份。請注意,資料庫中必須有此欄位,否則會出現錯誤訊息。
在用Outlook或Netscape編信時,請不要用"Base64"或"Quoted Printable"來將郵件內文字編碼,這樣會使Mail Merge找不到要轉換的欄位。
在Outlook Express下,請至"工具/選項/傳送/郵件傳送格式/設定/文字編碼方式",設成"無"。如果用"Quoted Printable"也可以,但是這樣就不可以使用中文的資料庫欄位了!
IF... ELSEIF...
ELSE... ENDIF
您可藉由自訂資料庫的記錄,來決定是否輸出相關的文件內容。例如:有一信用卡發卡銀行,對於它的客戶,只要一年消費十(含)次以上,即可享受免年費的優惠,在電子報的範本上即可利用此方法,由它的消費次數來判斷是否可享受"免繳年費"的優惠,電子報的範本內容可寫成:
#%IF (DBVar(次數)>=10#免繳年費
如果客戶的消費次數不足十次,則在他所收到的電子信件中不會出現"免繳年費",相對的,消費次數達10次以上,即出現"免繳年費"的文字內容。
使用的功能變數如下:
#%IF Expression#
#%ELSE#
#%ELSEIF Expression#
#%ENDIF#
使用的方式和一般的程式語法雷同,如您不熟悉語法,可以參考下面的範例:
來源範本檔:
[SampleADO.htm]
親愛的 #$姓名# #$稱謂#,
根據我們的資料, 您的訂報日是#$訂報日,D,'yyyy/m/d'#
您在我們電子商場的購物總金額是#$購買金額,C#
<#%IF (DBVar(月收入)>50000) or (DBVar(購買金額)>=50000)#> 您的月收入是#$月收入,C#
您真是有錢人
<#%ELSEIF DBVar(購買金額)>20000#> 您在我們電子商場的購物總金額是#$購買金額,C#
購物愉快
#%ELSEIF DBVar(活躍度)>500# 您在我們電子商場的活躍度是#$活躍度#
您真是我們的忠實客戶
<#%ELSE#> 您還真窮
<#%ENDIF#> 如果您不想收到此封信, 請點選以下超連結:
admin@myCompany.com?subject=remove
聲源科技 敬上
以上的範本中粗黑字體的部份,會因前面的條件敘述成立與否而決定是否出現在輸出的文件上,
下面是輸出的文件內容:
產生的文件內容如下(舉2個例子):
親愛的 王阿毛 先生,
根據我們的資料, 您的訂報日是1998/12/29
您在我們電子商場的購物總金額是$555.00
您在我們電子商場的活躍度是1234.67
您真是我們的忠實客戶
如果您不想收到此封信, 請點選以下超連結:
admin@myCompany.com?subject=remove
聲源科技 敬上
親愛的 程順青 經理,
根據我們的資料, 您的訂報日是1999/3/21
您在我們電子商場的購物總金額是$50,000.00
您的月收入是$73,000.00
您真是有錢人
如果您不想收到此封信, 請點選以下超連結:
admin@myCompany.com?subject=remove
聲源科技 敬上
條件的運算式如下:
左邊 (>, >=, <, <=, = , <>)
右邊
例如:
B <= 6.6
C = 'ABC'
邏輯運算式的格式如下:
((A>3) and (b<6)) or (c>5)
DBVar(欄位名稱) -- 此標籤的作用為取得資料庫當筆記錄的欄位值。
DBVar(!欄位名稱) -- 此標籤用於邏輯欄位,' ! '表示'NOT'的意思。
FormVar(網頁上的變數名稱) -- 此標籤用於取得使用者所傳回網頁之變數值。
ServerVar(伺服器變數名稱) -- 此標籤用於取得伺服器內定之物件值。
以下為多層次的條件判斷範例:
範例 [SampleADO.eml] 說明 [nest.eml] #%IF(A>3)#HA! HA!#%ENDIF#
親愛的 #$姓名# #$稱謂#,根據我們的資料, 您的訂報日是#$訂報日,D#
您在我們電子商場的購物總金額是#$購買金額,C##%IF DBVar(資訊科技)# 此段是 IF 成立的敘述 #%IF DBVar(生活休閒)# 您選了資訊科技報和生活休閒報(兩層迴圈 IF 成立) #%ELSE# 您只選了資訊科技報(兩層迴圈 ELSE 成立) #%ENDIF# #%IF DBVar(!政治)# 您選了資訊報,但不選政治報(兩層迴圈 IF 成立) #%IF DBVar(投資理財)# 您選了資訊科技報和投資理財報(三層迴圈 IF 成立) #%ENDIF# #%ELSE# 您選了資訊報和政治報(兩層迴圈 ELSE 成立) #%ENDIF# #%ELSEIF DBVar(生活休閒)# 此段是 ELSEIF 成立的敘述 #%IF DBVar(!政治)# 您選了生活休閒報,但不選政治報 (兩層迴圈 ELSEIF, IF 成立) #%IF DBVar(投資理財)# 您選了生活休閒報和投資理財報(三層迴圈 ELSEIF, IF, IF 成立) #%IF DBVar(月收入) > 0 # 您選了生活休閒報和投資理財報,且具經濟能力(四層迴圈 ELSEIF, IF, IF, IF 成立) #%ENDIF# #%ENDIF# #%ELSE# 您只選政治報(兩層迴圈 ELSE, ELSE 成立) #%ENDIF# #%ENDIF# 聲源科技 敬上
您如有複雜的判斷條件需求(多層次的條件判斷),不妨試試以上的超強功能吧!
如果在您外寄的電子報中,在主記錄(主表格)中需要連結至其他表格的多筆資料時,它將輕鬆的解決您的問題。
LINK標籤說明如下:
#!LINK(ComponentName,ModuleName,EndTag,$KeyField)#
:
:
<EndTag>
標籤 說明 #!LINK 表示此處需連結其他資料表格 ComponentName 指資料庫模組元件名稱,如:Table1 ModuleName 外掛資料庫模組檔案位置,如:D:\聲源\Mail\Samples\test.dfm。如果只有檔案名稱,而沒有檔案路徑,此檔案請放置於程式的相同目錄下。 Tag 起始標籤,如:Mark。 $KeyField 資料連結的欄位名稱,如:$IDNO。 : 此處可依據需求列出多筆資料明細。 <Tag> 結束標籤,如:<Mark>。
這個指令是用於關聯式的資料表格,如信用卡的對帳單,一個人會對應到多筆的消費明細。
範本檔內容:
[MasteDetail.eml]
親愛的#$cname##$sex,B,"先生/小姐"#您好:
以下所列示的是您的工作機會
<#!LINK(detail,D:\聲源\Mail\Samples\test.dfm,aaa,$IDNO)#>
--------------------------------------------------
公司名稱:#$company#
部門名稱:#$dept#
職務名稱:#$job#
連絡人 :#$contact#
聯絡電話:#$tel#
傳真號碼:#$fax#
地 址:#$address#
公司網址:#$www#
電子郵件:#$Email#
--------------------------------------------------
<aaa>
輸出結果:
********************
親愛的林明忠先生您好:
以下所列示的是您的工作機會
--------------------------------------------------
公司名稱:忠孝股份有限公司
部門名稱:資訊部
職務名稱:程式設計師
連絡人 :周先生
聯絡電話:25221234
傳真號碼:25224321
地 址:台北市中山北路100號
公司網址:www.risingedge.com.tw
電子郵件:chen@risingedge.com.tw
--------------------------------------------------
--------------------------------------------------
公司名稱:仁愛股份有限公司
部門名稱:資訊部
職務名稱:程式設計師
連絡人 :林小姐
聯絡電話:25221234
傳真號碼:25224321
地 址:台北市中山北路100號
公司網址:info-anywhere.com.tw
電子郵件:chen@risingedge.com.tw
--------------------------------------------------
--------------------------------------------------
公司名稱:信義股份有限公司
部門名稱:資訊部
職務名稱:程式設計師
連絡人 :陳小姐
聯絡電話:25221234
傳真號碼:25224321
地 址:台北市中山北路100號
公司網址:www.infohub.com.tw
電子郵件:chen@risingedge.com.tw
--------------------------------------------------
--------------------------------------------------
公司名稱:和平股份有限公司
部門名稱:資訊部
職務名稱:程式設計師
連絡人 :王小姐
聯絡電話:25221234
傳真號碼:25224321
地 址:台北市中山北路100號
公司網址:info-anywhere.com.tw
電子郵件:chen@risingedge.com.tw
--------------------------------------------------
*******************
cname, sex, company, dept, job, contact, tel, fax, address, www, Email為欄位名稱。
範本中的cname及sex為主表格的資料,其他如:company, dept, job, contact,
tel, fax, address, www, Email等皆為另一表格的連結資料。