这段时间在做一个邮件收发系统!!由于刚接触.所以走了不少的弯路.很好得到一些朋友的指点,终于一些关键技术点做完了!为了避免大家跟我一样走弯路.我特地把关键代码贴出来.大家一起学习!
asp.net(vb.net)+sql2000+jmail
首先把功能介绍一下:主要介绍一点的就是.发送邮件这块功能.支持地址薄选地址(弹出窗口返回值).也支持用户自己填写email地址,同时支持群发(也就是用户组),主要代码如下:
前台:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="sendmail.aspx.vb" Inherits="sendmail" %>
<%@ Register Assembly="FreeTextBox" Namespace="FreeTextBoxControls" TagPrefix="FTB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>郵件發送</title> <link href ="body.css" rel ="Stylesheet" type ="text/css" /> <script language ="javascript" type ="text/javascript" > window.onload =function() { document.getElementById ("div1").style.visibility ="hidden"; } function showcalendar() { document.getElementById ("div1").style.visibility ="visible"; } var sendto=""; var cto="" var sto="" var attname="" function showmailaddress() ''''这里很重要,利用showmailDialog获取值 { window.showModalDialog (''mailaddress.aspx'',window,''resizable:yes;dialogWidth:640px;dialogHeight:550px;''); } function getmailaddress() { if(document.getElementById ("sendto").value!="") { document.getElementById ("sendto").value+=";"; } if(document.getElementById ("cto").value!="") { document.getElementById ("cto").value+=";"; } if(document.getElementById ("sto").value!="") { document.getElementById ("sto").value+=";"; } document.getElementById ("sendto").value+=sendto; document.getElementById ("cto").value+=cto; document.getElementById ("sto").value+=sto; } function showmailatt() { window.showModalDialog (''mailatt.aspx'',window,''center:yes;dialogHeight:10px;dialogWidth:400px;''); } function getattname() ''''获取附件 { var att=document.getElementById ("attname"); if(att.value!="") { att.value+=";"; } att.value+=attname; } </script> <link href ="body.css" rel ="Stylesheet" type ="text/css" /> </head> <body> <form id="form1" runat="server"> <div align ="center"> <table width ="100%" > <tr> <td align ="left" > <label id="label1" >收件人</label><img style=" cursor :hand " onclick ="showmailaddress();" src ="TreeLineImages/mailbox.bmp" /> <input id="sendto" style ="width :80%;" type="text" runat ="server" /> </tr> <tr> <td align ="left"> <label id="label2" > 抄 送</label><img style=" cursor :hand " onclick ="showmailaddress();" src ="TreeLineImages/mailbox.bmp" /> <input id="cto" style ="width :80%;" type="text" runat ="server" /> </td> </tr> <tr> <td align ="left" > <label id="label3" > 密 送</label><img style=" cursor :hand " onclick ="showmailaddress();" src ="TreeLineImages/mailbox.bmp" /> <input id="sto" style ="width :80%;" type="text" runat ="server" /> </td> </tr> <tr> <td align ="left" > <label id="label4" >優先級別:</label> <asp:DropDownList ID="graddl" runat="server" AutoPostBack="True"> <asp:ListItem Value="1">高</asp:ListItem> <asp:ListItem Value="3">中</asp:ListItem> <asp:ListItem Value="5">低</asp:ListItem> </asp:DropDownList> <label id="label5" >發送時間:</label><input id="sendtime" runat ="server" type="text" /> <img style=" cursor :hand " onclick ="showcalendar();" runat ="server" src ="images/calender.BMP" id="IMG1" /> <div id="div1" style="z-index: 101; left: 616px; width: 100px; position: absolute; top: 128px; height: 100px"> <asp:Calendar ID="Calendar1" runat="server" BackColor="White" OnSelectionChanged ="Calendar1_SelectionChanged" BorderColor="#999999" Font-Names="Verdana" Font-Size="8pt" ForeColor="Black" Height="180px" Width="200px" CellPadding="4" DayNameFormat="Shortest"> <SelectedDayStyle BackColor="#666666" ForeColor="White" Font-Bold="True" /> <TodayDayStyle BackColor="#CCCCCC" ForeColor="Black" /> <OtherMonthDayStyle ForeColor="#808080" /> <NextPrevStyle VerticalAlign="Bottom" /> <DayHeaderStyle Font-Bold="True" Font-Size="7pt" BackColor="#CCCCCC" /> <TitleStyle BackColor="#999999" BorderColor="Black" Font-Bold="True" /> <SelectorStyle BackColor="#CCCCCC" /> <WeekendDayStyle BackColor="#FFFFCC" /> </asp:Calendar> </div> </tr> <tr> <td align ="left" > <label id="label6" > 附 件</label> <img style=" cursor :hand; width :20px; height :16px " onclick="showmailatt();" src="images/nodeopen.BMP" /><input id="attname" style ="width :80%" type="text" runat ="server" /> </td> </tr> <tr> <td align ="left" > <label id="label7" > 郵件主題</label> <input id="subject" style ="width :80%" type="text" runat ="server" /> </td> </tr> <tr> <td align ="left" > 郵件內容:</td> </tr> <tr> <td align ="left" style="height: 358px"> <FTB:FreeTextBox ID="mailbody" Width ="90%" runat="server"> </FTB:FreeTextBox> </td> </tr> <tr> <td align ="left"> <asp:Button ID="sendbt" runat="server" OnClick="sendbt_Click" Text="發送郵件" /> <asp:Button ID="savebt" runat="server" Text="保存郵件" /> <asp:Button ID="clearbt" runat="server" Text="清空內容" /> <asp:Button ID="cancelbt" OnClick ="cancelbt_click" runat="server" Text="取消" /> </td> </tr> </table> </div> </form> </body> </html>
后台:
Imports System Imports System.Net Imports System.IO Imports System.Data Imports System.Data.SqlClient Imports System.Web Imports System.Web.UI Imports jmail Imports System.Net.Sockets Imports FreeTextBoxControls Imports FreeTextBoxControls.Design Imports FreeTextBoxControls.ImageGallery Imports data Imports mailclass
Partial Class sendmail Inherits System.Web.UI.Page
Dim mymailclass As mailclass = New mailclass ''''业务逻辑层.
Protected Sub Calendar1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) sendtime.Value = Calendar1.SelectedDate Calendar1.Style("visibility") = "hidden" End Sub
Protected Sub sendbt_Click(ByVal sender As Object, ByVal e As System.EventArgs) Dim mg As jmail.Message = New jmail.Message Dim address As String = "" With (mg) .From = "chuxue1342@avl.com.cn" .FromName = "陈胜军" .Charset = "UTF-8" .ContentType = "multipart/html" .ISOEncodeHeaders = False .Encoding = "BASE64" .Priority = Convert.ToByte(graddl.SelectedValue) If subject.Value <> "" Then .Subject = subject.Value Else Response.Write("主題不能爲空") Exit Sub End If
.Body = mailbody.Text
''添加附件 Dim atts As String = attname.Value If atts <> "" Then Dim attal() As String = atts.Split(";") For i As Integer = 0 To attal.Length - 1 .AddAttachment(attal(i).ToString, False, "附件" & CInt(i) + 1) Next End If .MailServerUserName = "chuxue" '' 用户名 .MailServerPassWord = "****" ''密码
''添加聯系人 Dim sendaddresses As String = sendto.Value If cto.Value <> "" Then sendaddresses += ";" & cto.Value End If If sto.Value <> "" Then sendaddresses += ";" & sto.Value End If
Dim sendaddress() As String = sendaddresses.Split(";") If sendaddress.Length > 0 Then For j As Integer = 0 To sendaddress.Length - 1 If sendaddress(j).IndexOf("@") > 0 Then ''如果包含"@"则添加到收件人,否则查询数据库 .AddRecipient(sendaddress(j).ToString) Else mymailclass = New mailclass address = mymailclass.getaddress(sendaddress(j).ToString) ''''通过用户名或组名得到email地址 If address.ToString <> "" Then Dim emailstring() As String = address.Split(";") For f As Integer = 0 To emailstring.Length - 1 .AddRecipient(emailstring(f).ToString) Next End If address = "" End If Next Else Response.Write("至少选择一个收件人!!") End If End With Try If (mg.Send("smtp.avl.com.cn", False) = True) Then ''发邮件服务器 Response.Write("发送成功") End If Catch ex As Exception Response.Write("連接網絡超時,請重試!或與技術人員聯系!!") End Try End Sub
End Class
收邮件:
Dim popmail As jmail.POP3Class = New jmail.POP3Class() Try popmail.Connect("chuxue", "*****", "pop.qq.com", "110") ''用户名密码服务器 popmail.Logging = True If popmail.Count > 0 Then For i As Integer = 1 To popmail.Count Dim ms As Message = popmail.Messages(i) With ms .Charset = "UTF-8" .ContentType = "multipart/html" ''这个很重要.避免邮件内容乱码 .ContentTransferEncoding = "BASE64" .Encoding = "BASE64" End With
With Label3 .Text += "邮件数" & popmail.Count & "<br/>" .Text += ms.From & "发件人" & ms.From & "<br/>" .Text += "邮件主题" & ms.Subject & "<br/>" .Text += ms.Body & "<br/>" .Text += ms.Date & "<br/>" End With Dim atts As jmail.Attachments = ms.Attachments If atts.Count > 0 Then Label3.Text += "附件数量" & atts.Count & "<br/>" Dim j As Integer For j = 0 To atts.Count - 1 Label3.Text += atts.Item(j).Name Next
''可以通过atts.item(j).savetofile("保存路径") 保存附件到服务器 End If Next Else Label3.Text = "没有新邮件" End If
Catch ex As Exception Label3.Text = "系统错误" & ex.Message Finally popmail.Disconnect() End Try
选择地址薄:
这里我主要写js代码!需要注意一点: <base target ="_self" ></base>
<head runat="server"> <title>添加郵箱地址</title> <script language="javascript" type="text/javascript">
function returnvalue(sendmail,ctomail,stomail) ''通过dialogArguments获取父页面的变量传值 { var tb=window.dialogArguments ; tb.sendto=sendmail; tb.cto=ctomail; tb.sto=stomail; tb.getmailaddress(); }
</script> <link href ="body.css" rel ="Stylesheet" type ="text/css" /> <base target ="_self" ></base> </head>
后台:
这里我主要写添加按钮的代码:
Protected Sub addbt_ServerClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles addbt.ServerClick Dim sends As String = "" Dim ctos As String = "" Dim stos As String = "" Dim i As Integer If sendtolb.Items.Count > 0 Then For i = 0 To sendtolb.Items.Count - 1 If sends <> "" Then sends += ";" End If sends += sendtolb.Items(i).Text Next End If If ctolb.Items.Count > 0 Then For i = 0 To ctolb.Items.Count - 1 If ctos <> "" Then ctos += ";" End If ctos += ctolb.Items(i).Text Next End If If stolb.Items.Count > 0 Then For i = 0 To stolb.Items.Count - 1 If stos <> "" Then stos += ";" End If stos += stolb.Items(i).Text Next End If Page.ClientScript.RegisterStartupScript(GetType(String), "", "<script>javascript:returnvalue(''" + sends + "'',''" + ctos + "'',''" + stos + "'');window.close();</script>") ''''注册js代码运行 End Sub
|