ASP.NET 網頁製作教本 – 從基本語法學起 第13章 FTP 檔案上傳、Email 自動傳送
13-1 FTP 檔案上傳
FTP 檔案上傳的要素 表單的 Enctype(編碼型態)屬性須設定成 "multipart/form-data"。 佈置 File 型態的 HTML 輸入欄位,供使用者選取所要上傳的檔案 。
upload.aspx 例子 (1) <Html> <Body BgColor=White> <H3>檔案上傳 -- 上傳一個檔案<Hr></H3> <Form Enctype="multipart/form-data" runat="server"> 請輸入完整檔案路徑: <Input Type="File" id="FileUp" runat="server"><P> <asp:Button runat="server" Text="Upload" OnClick="UploadFile" /> <Hr> <asp:Label runat="server" id="Msg" /> </Form> </Body> </Html>
upload.aspx 例子 (2) <script language="VB" runat="server"> Sub UploadFile(sender As Object, e As EventArgs) Dim file As HttpPostedFile = FileUp.PostedFile If file.ContentLength <> 0 Then Msg.Text = "大小: " & File.ContentLength Msg.Text &= "<br>類型: " & File.ContentType Msg.Text &= "<br>名稱: " & File.FileName
upload.aspx 例子 (3) Dim FileSplit() As String = Split( File.FileName, "\" ) Dim FileName As String = FileSplit(FileSplit.Length-1) File.SaveAs( Server.MapPath(FileName) ) Else Msg.Text = "" End If End Sub </script>
Upload.aspx 網頁
Upload.aspx 網頁 表單的佈置(1) 位於 <Form ...> 與 </Form> 之間的標示在完成以下的表單佈置:
Upload.aspx 網頁 表單的佈置(2) <Form Enctype="multipart/form-data" runat="server"> 請輸入完整檔案路徑: <Input Type="File" id="FileUp" runat="server"><P> <asp:Button runat="server" Text="Upload" OnClick="UploadFile" /> <Hr> <asp:Label runat="server" id="Msg" /> </Form>
Upload.aspx 網頁 UploadFile 事件程序 (1)
Upload.aspx 網頁 UploadFile 事件程序 (2) <script language="VB" runat="server"> Sub UploadFile(sender As Object, e As EventArgs) Dim file As HttpPostedFile = FileUp.PostedFile If file.ContentLength <> 0 Then Msg.Text = "大小: " & File.ContentLength Msg.Text &= "<br>類型: " & File.ContentType Msg.Text &= "<br>名稱: " & File.FileName
Upload.aspx 網頁 UploadFile 事件程序 (3) Dim FileSplit() As String = Split( File.FileName, "\" ) Dim FileName As String = FileSplit(FileSplit.Length-1) File.SaveAs( Server.MapPath(FileName) ) Else Msg.Text = "" End If End Sub </script>
UploadFile 事件程序注意一 If file.ContentLength <> 0 Then:
UploadFile 事件程序注意二 存檔的方法:請注意利用 file.FileName 所讀取的檔案名稱是上網者那一端的完 整路徑檔案名稱,因此我們須利用以下 敘述取出其中的檔案名稱(不含路徑): 然後再利用以下敘述將檔案儲存在 Upload.aspx 的所在目錄: Dim FileSplit() As String = Split( file.FileName, "\" ) Dim FileName As String = FileSplit(FileSplit.Length-1) File.SaveAs( Server.MapPath(FileName) )
上傳多個檔案
節錄自 Uploads.aspx (1) <Form Enctype="multipart/form-data" runat="server"> 請輸入完整路徑檔案名稱:<br> <Input Type="File" id="FileUp1" runat="server"><br> <Input Type="File" id="FileUp2" runat="server"><br> <Input Type="File" id="FileUp3" runat="server"><br> <asp:button runat="server" Text="Upload" OnClick="UploadFile" /> <Hr> <asp:Label runat="server" id="Msg" /> </Form>
節錄自 Uploads.aspx (2-1) Sub UploadFile(sender As Object, e As EventArgs) Dim I As Integer Msg.Text = "" For I = 0 To Request.Files.Count - 1 Dim File As HttpPostedFile = Request.Files(I) If File.ContentLength > 0 Then ' 顯示上傳檔案的資訊 Msg.Text &= "檔案: " & File.FileName Msg.Text &= ", " & File.ContentLength Msg.Text &= ", " & File.ContentType & "<br>"
節錄自 Uploads.aspx (2-1) ' 儲存檔案 Dim FileSplit() As String = Split( File.FileName, "\" ) Dim FileName As String = FileSplit(FileSplit.Length-1) File.SaveAs( Server.MapPath(FileName) ) End If Next End Sub
13-2 Email 自動傳送
Email 自動傳送 在網頁製作中,需要自動傳送 Email 給上網者的情況很多,例如: 電子購物網頁 密碼網頁 電子賀卡
MailMessage 及 SmtpMail 物件 在ASP.NET 底下,欲傳送 Email,須使用 MailMessage 及 SmtpMail 物件,其中MailMessage用來設定Email的內容,而SmtpMail則是將Email傳送出去
MailMessage 及 SmtpMail 物件的程式架構 (1) <%@ Import Namespace="System.Web.Mail" %> Dim mail as New MailMessage ' 建立一個MailMessage物件 ' 設定郵件的屬性 mail.To = 收件人e-mail mail.From = 送件人e-mail mail.Subject = 主旨 mail.BodyFormat = 郵件格式(純文字或Html) mail.Body = 郵件內容
MailMessage 及 SmtpMail 物件的程式架構 (2) ' 藉助SmtpMail送出郵件 On Error Resume Next SmtpMail.SmtpServer = SMTP Server的網址 SmtpMail.Send(mail) If Err.Number <> 0 Then ' 郵件送出失敗, 接著利用Err.Description讀取錯誤訊息 Else ' 郵件送出成功 End If
SMTP Server 與郵件的傳送 把SMTP Server設定成HiNet的SMTP Server,如下: SmtpMail.SmtpServer = "msa.hinet.net" SmtpMail.Send(mail)
Email 傳送實例
mail01.aspx (1) <%@ Import Namespace="System.Web.Mail" %> <Html> <Body BgColor="White"> <H2>ASP.NET Email 發送程式!<Hr></H2> <Form runat="server"> <Table Border=1> <Tr><Td>收件者:</Td> <Td><asp:TextBox id="mailTo" Size=40 runat="server"/></Td></Tr> <Tr><Td>寄件者:</Td> <Td><asp:TextBox id="mailFrom" Size=40 runat="server"/></Td></Tr> <Tr><Td>主旨:</Td> <Td><asp:TextBox id="mailSubject" Size=40 runat="server"/></Td></Tr> <Tr><Td>內文:</Td> <Td><asp:TextBox runat="server" id="mailBody" TextMode="MultiLine" Rows=8 Cols=60 /> </Td></Tr> </Table> <asp:Button runat="server" Text="送 出" OnClick="Button_Click" /> </Form>
mail01.aspx (2) <Hr><asp:Label id="Msg" runat="server" ForeColor="Red" /><p> <Font Size=-1 Color=Blue>使用本範例之前,請先參閱書本「SMTP Server 與郵件的傳送」段落中的說明,設定好 SmtpMail.SmtpServer 屬性。</Font> </Body> </Html> <script Language="VB" runat="server"> Sub Button_Click(sender As Object, e As EventArgs) Dim mail As MailMessage = New MailMessage mail.To = mailTo.Text mail.From = mailFrom.Text mail.Subject = mailSubject.Text mail.BodyFormat = MailFormat.Text mail.Body = mailBody.Text
mail01.aspx (3) On Error Resume Next SmtpMail.SmtpServer = "msa.hinet.net" SmtpMail.Send(mail) If Err.Number <> 0 Then Msg.Text = Err.Description Else Msg.Text = "郵件已經送出!" End If End Sub </script>
mail02.aspx 網頁
mail02.aspx 程式(1) 增加了「格式」選擇鈕: <asp:RadioButtonList id="Format" runat="server" RepeatDirection="Horizontal" RepeatColumns="2"> <asp:ListItem Selected>Html 格式</asp:ListItem> <asp:ListItem>純文字格式</asp:ListItem> </asp:RadioButtonList>
mail02.aspx 程式(2) 而設定屬性的程式修改成: mail.To = mailTo.Value mail.From = mailFrom.Value mail.Subject = mailSubject.Value If Format.SelectedItem.Text = "純文字格式" Then mail.BodyFormat = MailFormat.Text Else mail.BodyFormat = MailFormat.Html End If mail.Body = mailBody.Value
設定郵件格式
設定收件人姓名(1)
設定收件人姓名(2) 將 Email 帳號改成 「人名<Email 帳號>」 ,例如: mail.To = "王國榮<kjwang@gcn.net.tw>" mail.From = "阿毛<amou@kjwang.com>" mail.Subject = 主旨 mail.BodyFormat = 郵件格式(純文字或Html) mail.Body = 郵件內容
多位收件人 如果同一郵件要傳送給多個人,可以將所有郵件地址串在一起,以 ',' 分隔,例如: mail.To = "王國榮<kjwang@gcn.net.tw>, 阿毛<amou@kjwang.com>" mail.From = "service@kjwang.com" mail.Subject = 主旨 mail.BodyFormat = 郵件格式(純文字或Html) mail.Body = 郵件內容
副本收件人 設定副本收件人的方法是設定 Cc 屬性,例如: mail.To = "王國榮<kjwang@gcn.net.tw>" mail.From = "service@kjwang.com" mail.Cc = "阿毛<amou@kjwang.com>" mail.Subject = 主旨 mail.BodyFormat = 郵件格式(純文字或Html) mail.Body = 郵件內容
密件副本收件人 設定密件副本收件人的方法是設定 Bcc 屬性,例如: mail.To = "王國榮<kjwang@gcn.net.tw>" mail.From = "service@kjwang.com" mail.Bcc = "阿毛<amou@kjwang.com>" mail.Subject = 主旨 mail.BodyFormat = 郵件格式(純文字或Html) mail.Body = 郵件內容
增加附件到郵件中 在 Email 傳送中,若要將檔案附加到 Email 中一起傳送 -- 附加檔案,所需撰寫的程式如下: Dim attach As New MailAttachment(完整路徑檔案名稱) mail.Attachments.Add( attach ) … SmtpMail.Send(mail)
mail03.aspx 網頁
mail03.aspx 網頁程式(1) 新增 <Input Type=“File” ...> 欄位,如 下: 表單屬性的修改:表單需增加Enctype屬 性的設定,如下: <Input Type="File" id="FileUp" runat="server"> <Form Enctype="multipart/form-data" runat="server">
mail03.aspx 網頁程式(2) 新增程式:在 Button_Click 事件程序中,新增以下程式: Dim file As HttpPostedFile = FileUp.PostedFile If file.ContentLength <> 0 Then Dim FileSplit() As String = Split( File.FileName, "\" ) Dim FileName As String = FileSplit(FileSplit.Length-1) File.SaveAs( Server.MapPath(FileName) ) Dim attach As New MailAttachment(Server.MapPath(FileName)) mail.Attachments.Add( attach ) End If