個性化郵件

一個炎熱的下午,我被分配工作到E - mail信箱裡一堆人,問他們做了一項調查。 因為這些都是忙碌的人們,我們認為這將是不錯的每一個個性化而不是一般親愛的先生/女士...

個性化的電子郵件 Perl腳本

對於那些誰一直在CS(計算機科學而不是反恐精英!)一段時間,這可能是相當容易的。 但要推廣使用Perl的(這是一個不錯的腳本語言),我認為這將是很好的展示了如何完成這個任務可以在這簡潔的腳本語言。 你可以認為這是一個簡單的Perl指南或一個簡單的Perl的例子。

先決條件

這是在UNIX / Linux系統,其中Perl是預先安裝。 該腳本還依賴於標準的郵件程序“的sendmail”。 從理論上講,這也可以在Windows上進行,用perl的解釋器郵件工具

受眾

這是為了誰的人有編程背景。 我記得的日子,當我沮喪時,讀了一些書上的腳本語言,覆蓋東西,例如如何寫一個 for循環。 我想我知道如何寫一個循環,如果我有編程背景非常感謝你。

現在我將開始討論劇本的點點滴滴。 如果你願意,你可以下載完整的腳本第一。

#!/ USR的/地方/ bin / perl中鎢

$ sendmail的='/ usr / lib中/ sendmail的- I型T公司;

更改此行到哪裡 Sendmail是位於。 這可以在UNIX系統上找到輸入 whereis Sendmail的。

$發件人='yourname@address.com';

替補這一行你的地址。 在Perl中,單引號和雙引號都用引號字符串。 特殊字符的單引號的字符串沒有被逃脫,而他們需要被轉義雙引號的字符串。 (即“恩姆\ @ address.com”等同於'yourname@address.com')。

開放(的contactlist,'contactlist.txt');

此行打開文件名為'contactlist.txt'。 第一行是一個人的名字,第二行的e - mail地址的人答:第三行是名稱的人B和第四行是地址的人B等服務條款的perl語法的contactlist現在是文件句柄的聯繫人列表文件。

$計數= 0;

Perl變量不需要使用前必須聲明它們。 你甚至沒有定義類型,它會知道你的價值觀念的基礎上分配給它。 非數組類型(整數,字符串,字符)變量前綴一個美元符號。

而(<CONTACTLIST>){

<CONTACTLIST>指從讀一行的contactlist並返回true,如果讀取成功,否則返回false。 此行有效地遍歷整個文件,逐行。 讀取的行會自動分配給 $ _(默認分配給變量,Perl的變量時沒有指定)

    終日啃食;

終日啃食是一個方便的命令,刪除行結束字符在字符串值分配給 $ _

    $名單[$計數++]=$_;

默認變量分配到一個數組中的元素稱為名單。 當名單是針對 /被叫作為整個數組,它的前綴 @(即@名單)。 但是,因為我們被分配到一個特定的索引(其中存儲一個非數組類型),我們整個事情的前綴以美元符號。 (所以基本上$(名單 [指數]))。 請注意,我們不必宣布大小的數組要么事先。

    $ _ = <CONTACTLIST>;

另一條線從閱讀的contactlist文件。

    終日啃食;

    $名單[$計數++]=$_;

}

%= @名單名單;

我們需要參考名單作為數組在這一行,所以我們使用@前綴的權利。 在%前綴是指變量是一個關聯數組。 關聯數組是一個數組,可以採取字符串作為索引。 例如,colorArray {'紅'} ='白減去綠色和藍色。“這是什麼線的作用是打開 @名單(傳統陣列在C / C + +)轉化為聯繫的數組(使用相同的名字)。如何轉換發生採取的第一個元素是在原有數組並調用它的鍵,它後面的元素,並調用它的價值。第三個要素是關鍵,第四是價值,依此類推。

關閉(的contactlist);

關閉的contactlist文件。 這很簡單。

開放(消息,'message.txt');

當我們看完名單的姓名和電子郵件,我們打開'message.txt'來閱讀主要內容的電子郵件發送我們。

@ entireMessage =的<message>;

此行表明,<FILEHANDLE>是一個重載運算符。 當它被分配到一個標量變量($前綴,或$ _),它讀取一行。 如果是分配給一個數組變量,它會讀取整個文件並將其放置在每行到一個不同的元素(按順序)。

而(($收件人,$地址)=每(%名單)){

這意味著每個鍵和值對數組中的聯營公司,分配的主要接受者元和價值為地址。

    #印刷“鍵:$鍵,值:$值\ n”;

此行是註釋掉。 (#為前綴的唯一方法註釋掉在Perl的東西。)此行表明,在一個雙引號的字符串,標量變量將被替換為它們的值。 這不是聰明的方法來連接字符串? (這就像在C printf的不帶參數!)

    $ mailbody =“親愛的收件人$,\ ñ \ N”的;

    的foreach(@ entireMessage){$ mailbody .=$_;}

首先,.=是一個串聯運算符。 (即$答:= $ b是一樣的“$元乙”)。 這條線的作用是什麼把@ entireMessage成一個大串聯的字符串

    打印$ mailbody;

打印出$ mailbody到控制台,以便您可以去看看它。

    開放(郵件,“| $ sendmail的愛- T的”);

這行設置環境,讓你隨時打印郵寄東西,在將來,什麼是管道的sendmail元(其中包含的位置sendmail程序)。

    打印郵件“:$地址\ n”;

    打印郵件“發件人:發件人$ \ N”的;

    打印郵件“主題:AddSubjectLine \ ñ \ N”的;

    打印郵件“$ mailbody”;

以上是語法發送電子郵件使用sendmail。 基本上是由上述各行的管道與 sendmail,郵件將被發送。

    關閉(郵件);

}

關閉句柄,因為我們已經完成了它。

最後一句話:

對於那些誰也做了一些程序,你可以實現的腳本是什麼做的是非常低效的 - 例如,它會讀取整個文件到一個數組,然後轉換成一個字符串數組,然後將其轉換回等顯然,這是一個人為的例子的意思來告訴你一些基本的Perl。 歡迎與我聯繫 ,如果您有任何問題。

[建議/意見] [軟件聲明] [私隱政策]
©版權所有2002-2011。 保留所有權利。
Software on this web site is provided "as is". Use at your own risk.