亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

用php發(fā)送帶附件的Email

瀏覽:107日期:2024-01-30 16:09:49

參考了一下網(wǎng)上的文章。俗話說,天下文章一大抄,看你會(huì)抄不會(huì)抄。關(guān)鍵是能為我所用,這是最重要的。廢話不多講,let‘s go。 其實(shí)發(fā)mail很簡(jiǎn)單,php有現(xiàn)成的函數(shù),可以參考php 的 manual,特別是第四個(gè)例子,講的很詳細(xì)。 關(guān)鍵是怎么把上傳附件跟郵件發(fā)送結(jié)合起來。關(guān)于文件的上傳,可以參考http://blog.csdn.net/slamdunk3/archive/2005/02/23/299025.aspx 這篇文章。 講一下 文件上傳的方法及其屬性: 我們假設(shè)文件上傳字段的名稱如上例所示,為 userfile。名稱可隨意命名。 表單里可以這樣寫: <input type=file name=userfile> 提交之后,php利用$_FILES 數(shù)組 自動(dòng)獲取相關(guān)參數(shù): $_FILES['userfile']['name'] 客戶端機(jī)器文件的原名稱。 $_FILES['userfile']['type'] 文件的 MIME 類型,需要瀏覽器提供該信息的支持,例如“image/gif”。 $_FILES['userfile']['size'] 已上傳文件的大小,單位為字節(jié)。 $_FILES['userfile']['tmp_name'] 文件被上傳后在服務(wù)端儲(chǔ)存的臨時(shí)文件名。 $_FILES['userfile']['error'] 和該文件上傳相關(guān)的錯(cuò)誤代碼。['error'] 是在 PHP 4.2.0 版本中增加的。

注: 在 PHP 4.1.0 版本以前該數(shù)組的名稱為 $HTTP_POST_FILES,它并不像 $_FILES 一樣是自動(dòng)全局變量。PHP 3 不支持 $HTTP_POST_FILES 數(shù)組。 當(dāng) php.ini 中的 register_globals 被設(shè)置為 on 時(shí),您可以使用更多的變量。例如,$userfile_name 等價(jià)于 $_FILES['userfile']['name'],$userfile_type 等價(jià)于 $_FILES['userfile']['type'] 等。請(qǐng)記住從 PHP 4.2.0 開始,register_globals 的默認(rèn)值為 off,因此我們建議您不要依賴于改設(shè)置項(xiàng)而使用剛剛提到的那些附加變量。 文件被上傳后,默認(rèn)地會(huì)被儲(chǔ)存到服務(wù)端的默認(rèn)臨時(shí)目錄中,除非您將 php.ini 中的 upload_tmp_dir 設(shè)置為了其它的路徑。服務(wù)端的默認(rèn)臨時(shí)目錄可以通過更改 PHP 運(yùn)行環(huán)境的環(huán)境變量 TMPDIR 來重新設(shè)置,但是在 PHP 腳本內(nèi)部通過運(yùn)行 putenv() 函數(shù)來設(shè)置是不起作用的。該環(huán)境變量也可以用來確認(rèn)其它的操作也是在上傳的文件上進(jìn)行的。 有了這些,我們?cè)倏磁c郵件相關(guān)的東西。下面是一個(gè)帶附件(一個(gè)HTML文件)電子郵件的例子。

Return-Path: Date: Mon, 22 May 2000 19:17:29 +0000 From: Someone To: Person Message-id: <83729KI93LI9214@example.com> Content-type: multipart/mixed; boundary='396d983d6b89a' Subject: Here's the subject --396d983d6b89a Content-type: text/plain; charset=iso-8859-1 Content-transfer-encoding: 8bit

This is the body of the email.

--396d983d6b89a Content-type: text/html; name=attachment.html Content-disposition: inline; filename=attachment.html Content-transfer-encoding: 8bit

This is the attached HTML file

--396d983d6b89a--

前面的7行是郵件的頭,其中值得注意的是Content-type頭部分。這個(gè)頭告訴郵件程序電子郵件是由一個(gè)以上的部分組成的。不含附件的郵件只有一個(gè)部分:消息本身。帶附件的電子通常至少由兩部分組成:消息和附件。這樣,帶兩個(gè)附件的郵件由三部分組成:消息,第一個(gè)附件和第二個(gè)附件。

帶附件的電子郵件的不同部分之間用分界線來分隔。分界線在Content--type頭中定義。郵件的每個(gè)新部分以兩個(gè)連字號(hào)(--)和分界線開始。 最后一個(gè)分界線后也有兩個(gè)連字號(hào),表示這個(gè)郵件中沒有其它的部分了。

在每個(gè)分界線后有一些行,用來告訴郵件程序這個(gè)部分的內(nèi)容的類型。 比如,看看上面例子中第一個(gè)分界線后面的兩行--以Content-type: text/plain開頭的行。這些行說明后面的部分是ISO-8859-1字符集的純文本。跟在第二個(gè)分界線后的行告訴郵件程序現(xiàn)在的部分是一個(gè)HTML文件,它的名字是'attachment.html'。

Content-disposition這持告訴郵件程序如果可能就以內(nèi)嵌的方式顯示附件?,F(xiàn)在新的郵件程序會(huì)在消息后顯示HTML的內(nèi)容。如果Content- disposition被設(shè)為attachment,那么郵件程序就不會(huì)顯示HTML文件的內(nèi)容,而是顯示一個(gè)連接到文件的圖標(biāo)(或其它的類似的東西)。收件人要看附件的內(nèi)容,必須點(diǎn)擊這個(gè)圖標(biāo)。一般情況下,如果附件是一些文本(包含HTML),Content-disposition會(huì)被設(shè)為inline,這是因?yàn)楝F(xiàn)在大部分郵件程序能夠不借助其它瀏覽器而直接顯示附件(文本)的內(nèi)容。如果附件不是文本(比如圖片或其它類似的內(nèi)容),Content-disposition 就設(shè)為attachment。 我們仿照上面的例子,自己寫一個(gè)php程序,可以對(duì)提交的 收信人,發(fā)送人,信件內(nèi)容,附件進(jìn)行處理。 首先建立一個(gè)靜態(tài)頁(yè)面,代碼如下: <html> <body> <form method=post name=sndml action=sendmail.php ENCTYPE='multipart/form-data'> <table> <tr ><td>發(fā)送者:</td> <td><input type=text name=from ></td> </tr> <tr ><td>接受者:</td> <td><input type=text name=to ></td> </tr> <tr ><td>下載提示:</td> <td><input type=text name=text ></td> </tr> <tr ><td>源數(shù)據(jù)文件:</td> <td><input type=file name=upload_file size=40></td> </tr> <tr><td>&nbsp</td> <td><input type='submit' value='確定'> </td> </tr> </table> </form> </body> </html> 要注意的是 : 表單里 ENCTYPE='multipart/form-data' 一定要有。 再來看一下 發(fā)送郵件的php程序: <?php //文本內(nèi)容 $text = $_POST['text']; //標(biāo)題 $subject = $_POST['subject']; //發(fā)送者 $from = $_POST['from']; //接受者 $to = $_POST['to']; //附件 $file = $_FILES['upload_file']['tmp_name']; // 定義分界線 $boundary = uniqid( ''); $headers = 'Content-type: multipart/mixed; boundary= $boundaryrn'; $headers .= 'From:$fromrn'; //確定上傳文件的MIME類型 if($_FILES['upload_file']['type']) $mimeType = $_FILES['upload_file']['type']; else $mimeType ='application/unknown'; //文件名 $fileName = $_FILES['upload_file']['name'];

// 打開文件 $fp = fopen($file, 'r'); // 把整個(gè)文件讀入一個(gè)變量 $read = fread($fp, filesize($file)); //我們用base64方法把它編碼 $read = base64_encode($read); //把這個(gè)長(zhǎng)字符串切成由每行76個(gè)字符組成的小塊 $read = chunk_split($read); //現(xiàn)在我們可以建立郵件的主體 $body = '--$boundary Content-type: text/plain; charset=iso-8859-1 Content-transfer-encoding: 8bit $text --$boundary Content-type: $mimeType; name=$fileName Content-disposition: attachment; filename=$fileName Content-transfer-encoding: base64 $read --$boundary--'; //發(fā)送郵件 if(mail($to, $subject,$body,$headers)) print 'OK! the mail $from --- $to has been send<br>'; else print 'fail to send mail <br>'; ?> 看不明白沒關(guān)系,我來說明一下: 1,郵件頭的構(gòu)造 :一般包括 內(nèi)容類型(Content-type)要發(fā)送附件,設(shè)置為 multipart/mixed 意思是多個(gè)部分 (郵件本身+附件)。 boundary ,就是上面提到的分界線,他的值用php自帶的 uniqid();函數(shù)取得 接受方,抄送等,在后面加上 From: Cc:。與上面的 Content-type boundary 之間用 rn 分割 。 2 郵件體 如果是純文本的郵件內(nèi)容 它的格式如下: Content-type: text/plain; charset=iso-8859-1 Content-transfer-encoding: 8bit 后面再緊接著加上 郵件的文本內(nèi)容。 如果是附件: Content-type: $mimeType; name=$fileName Content-disposition: attachment; filename=$fileName Content-transfer-encoding: base64 后面再緊接著加上 附件內(nèi)容。 $mimeType 是附件的 MIME類型。 可以用 $_FILES['upload_file']['type'] 得到。 $fileName 就是附件的名字了 郵件文本內(nèi)容和附件之間用 boundary 分割。 有人會(huì)問,附件內(nèi)容是什么?附件內(nèi)容就是用read函數(shù)讀入所上傳的附件,然后再把它經(jīng)過base64編碼之后再用chunk_split 大卸N塊,每塊大小是默認(rèn)的76字符。 好了,現(xiàn)在再去看那段程序,應(yīng)該沒什么問題了吧?把相應(yīng)的變量帶入mail函數(shù)里面就ok了。 以上程序在 PHP Version 4.3.8 freeBSD 下測(cè)試通過。 參考文章:《php 發(fā)送帶附件的郵件 作者: cn-linux》

標(biāo)簽: PHP
主站蜘蛛池模板: 国产99r视频精品免费观看 | 在线观看国产精成人品 | 你懂得在线网址 | 日本伊人精品一区二区三区 | 老司机日日摸夜夜摸精品影院 | 91热久久免费精品99 | 国产毛片高清 | 青青青国产依人免费视频 | 麻豆免费入口 | 免费视频一区二区三区四区 | 快射视频网 | 色播综合网 | 91精品久久久久含羞草 | 一区在线播放 | 久 在线播放 | 国产精品久久久久久久久鸭 | 成人国产在线视频在线观看 | 玖玖草在线观看 | 亚洲精品中文字幕区 | 久久夜色精品国产尤物 | 中日韩欧美一级毛片 | 中文字幕免费在线视频 | 国内自拍 在线播放 网红 | 日本伊人精品一区二区三区 | 欧美激情毛片 | 午夜拍拍福利视频蜜桃视频 | 露脸超嫩97后在线播放 | 伊人22222 | 在线视频污 | 国产一区在线播放 | 无毒不卡 | 欧美黄三级在线观看 | 日韩视频在线一区 | 看黄网址在线观看 | 伊人亚洲综合网成人 | 国产1区在线观看 | 免费a级毛片在线播放 | 橘子视频在线观看 | 五十路一区二区三区视频 | 婷婷综合激情 | 激情婷婷丁香 |