Mail Merge

支援Mail Merge之型態與格式 Mail Merge 測試
條件判斷報表 多層次報表 (Master/Detail)

所謂「Mail Merge」就像是Windows Word的「合併列印」功能一樣。UFO Mailer 1.0國內唯一能夠做到「Mail Merge」的電子郵件發送軟體,這項功能特別適用於會員信或電子報類的應用。

「Mail Merge」讓您可以送出根據收信者量身訂作的信,每封信都是獨一無二,除了讓收信者備感貼心外,更能轉達許多重要的訊息。


舉例說明,讓您能更加了解為什麼「Mail Merge」是那麼地重要:

  1. 如果沒有Mail Merge功能,您必須要這樣寫信:
  2. 親愛的用戶

    您的會員資格將於近日到期,請盡速繳納會費,謝謝您的支持與合作。

  3. 如果有「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省略。

回頁首

Mail Merge 測試

製作郵件的樣版(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#
聲源科技 敬上

 

您如有複雜的判斷條件需求(多層次的條件判斷),不妨試試以上的超強功能吧!

回頁首

多層次報表 (Master/Detail)

 

如果在您外寄的電子報中,在主記錄(主表格)中需要連結至其他表格的多筆資料時,它將輕鬆的解決您的問題。

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等皆為另一表格的連結資料。

回頁首

回 UFO Mailer回產品優勢回市場定位回操作說明