項目里有一個發送郵件的需求,我從網上找了幾種方法,列舉如下:
1.
<a href="mailto:test@163.com;test1@163.com?CC=test@163.com&BCC=test@163.com&Subject=Hello&Body=你好">給我發郵件</a>
2.
<button type="button" id="email">發送郵件</button>
<script type="text/javascript"> $(document).on("click", "#email", function () { document.location = "Mailto:me@home.com?subject=Feedback; //經過測試這個方法不成功 }); </script>
3.
<form name="frmEmailOutLook" action="" method="post" enctype="text/plain"> <input type="hidden" name="message" value=""> </form> <form name="frmEmail" action="" method="post"> 姓名:<input type="text" name="name" value="a"><BR> 電話:<input type="text" name="phone" value="b"><BR> 網址:<input type="text" name="website" value="c"><BR> 主題:<input type="text" name="subject" value="d"><BR> 內容:<textarea name="message" >ee ddd</textarea><BR> <input type="button" name="send" value="send" onClick="toOutLook()"> </form>
<script language="javascript">... function toOutLook()...{ var objFrm = document.frmEmail; var objFrmOutLook = document.frmEmailOutLook; var msg = ""; msg += "姓名: " + objFrm.name.value + " "; msg += "電話: " + objFrm.phone.value + " "; msg += "網址: " + objFrm.website.value + " "; msg += "主題: " + objFrm.subject.value + " "; msg += "內容: " + objFrm.message.value + " "; objFrmOutLook.message.value = msg; objFrmOutLook.action = "mailto:sundysea@hotmail.com?subject=" + objFrm.subject.value; objFrmOutLook.submit(); } </script>
不過這個方法有幾個問題:1.郵件的body是type=hideen的value值,並且顯示的是message=.....,message是type=hideen的name,如果將name="message"換成
name="Content",那body的顯示內容就變成了Content=.........。
2.如果內容里寫的是漢字,那么在outlook里顯示時就會亂碼
最后我改良了這個代碼,不用form進行發送郵件。
<div class="commonemail_Wrap"> <!-- <form name="frmEmailOutLook" action="" method="post" enctype="text/plain"> <input type="hidden" name="message" value=""/> </form>--> <!--<form name="frmEmail" action="" method="post"> <div><label>收件人</label><input type="text" name="website" /></div> <div><label>主題</label><input type="text" name="subject"/></div> <div><label class="unique">內容</label><textarea rows="4" name="message"></textarea></div> <input type="button" name="send" value="發送郵件" id="SendEmai"/> </form>--> <div> <div><label>收件人</label><input type="text" name="website" id="test1" /></div> <div><label>主題</label><input type="text" id="test2" name="subject"/></div> <div><label class="unique">內容</label><textarea rows="4" id="test3" name="message"></textarea></div> <!--<input type="button" name="send" value="發送郵件" id="SendEmail"/>--> <a href="" id="SendEmail">發送郵件</a> </div> </div>
<script type="text/javascript"> $(document).on("click", "#SendEmail", function () { var website = document.getElementById("test1").value; var subject = document.getElementById("test2").value; var body = document.getElementById("test3").value; var url = "mailto:" + website + "?subject=" + subject + "&body=" + body; document.getElementById("SendEmai").setAttribute("href", url); //return fasle; }); </script>
不過第三種方法的兩個不同的方式,還有些地方不同:用form發送郵件不會出現自己outlook中的固定模板,但用a發送郵件的話會出現那種模板
2014/01/10新增加的內容
項目里發送郵件功能要求把receiver、subject、body都寫好,操作者不需要不斷地填寫信息,這個功能容易實現,思路是寫一個保存發送郵件信息的XML文件,用Xml Dom讀取XML里的數據,並且把數據賦給text框。這個功能做好后又要求能夠編輯receiver、subject、body信息,並且保存下來。
開始我一直以為把修改后的數據直接賦給XMl節點的nodeValue,然后用XMlDoc.save("message.xml"); ,但是XMlDoc沒有save()方法,並且查找資料說js能夠讀取XMl文件,但是不能修改。即使修改了某個節點的nodeValue,也只是存在於客戶端內存,實際的XMl文件沒有任何變化。還有人說用FSO能夠修改XML文件,但是FSO是IE的ActiveXObject對象里的屬性,這種方法我不想用,也沒有試試,不知道實際的結果到底是什么樣的!
后來和組長說了這個問題,他說這個功能是我理解錯誤,XML文件當然是不能操作的,瀏覽器向服務器發送請求,XMl文件在服務器的硬盤里,瀏覽器禁止跨域操作。應該把修改的receiver、subject、body信息保存到本地,對客戶進行個性化定制。如果他換了一台電腦或者瀏覽器,就顯示原始的XMl信息。
天啊,原來是這樣啊!我理解錯了.................
最后我是把修改的receiver、subject、body信息保存到localStorage,如果沒有人主動清理,那么它會永久保存在客戶端。