توضیحات و دانلود

آپلود و ضمیمه کردن چند فایل به عنوان پیوست به ایمیل در ASP.Net
0 0
آپلود و ضمیمه کردن چند فایل به عنوان پیوست به ایمیل در ASP.Net

با سلام در این مقاله نحوه آپلود و ضمیمه کردن چند فایل به عنوان پیوست به ایمیل در ASP.Net با استفاده از افزونه jQuery Uploadify توضیح خواهیم داد.
 
کد HTML
در زیر کد HTML  وجود دارد که چیزی جز فرم ساده برای ارسال ایمیل نیست.

<table>
<tr><td>To:</td><td><asp:TextBox ID="txtTo" runat="server"></asp:TextBox></td></tr>
<tr><td>Subject:</td><td><asp:TextBox ID="txtSubject" runat="server"></asp:TextBox></td></tr>
<tr><td>Body:</td><td><asp:TextBox ID="txtBody" runat="server" TextMode="MultiLine"></asp:TextBox></td></tr>
<tr><td></td><td><asp:FileUpload ID="FileUpload1" runat="server"/></td></tr>
<tr><td></td><td><table id="attachedfiles"></table></td></tr>
<tr><td></td><td><asp:Button ID="btnSend" runat="server" Text="Send" OnClick="btnSend_Click"/></td></tr>
</table>

ایجاد کلید منحصر به فرد برای حافظه پنهان
دررویداد بارگذاری صفحه یک کلید منحصر به فرد برای حافظه پنهان ایجاد می شود و در یک ویژگی ViewState محافظت شده ذخیره می شود
C #

protected string Key
{
    get { return ViewState["Key"].ToString(); }
    set { ViewState["Key"] = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        this.Key = Guid.NewGuid().ToString();
        Cache[this.Key] = new List<HttpPostedFile>();
    }
}

VB.Net

Protected Property Key() As String
    Get
        Return ViewState("Key").ToString()
    End Get
    Set(value As String)
        ViewState("Key") = value
    End Set
End Property
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        Me.Key = Guid.NewGuid().ToString()
        Cache(Me.Key) = New List(Of HttpPostedFile)()
    End If
End Sub

در ابتدا این مقاله از متغیر Session استفاده می کرد ، اما بنا به دلایلی بارگذاری مجدد Session در مرورگر Firefox را حفظ نمی کرد از این رو مجبور شدیم عملکرد را تغییر دهیم . باید یک کلید GUID منحصر به فرد برای هر کاربر تولید کنیم تا بتوان فایلها را بطور منحصر به فرد مشخص کرد.
بارگذاری چندین فایل به عنوان پیوست های ایمیل
برای اجازه انتخاب و بارگذاری چندین فایل ، از افزونه Uploadify jQuery استفاده کرده ایم
 در اسکریپت از <٪٪> server side تگ <%=Key %> استفاده میکنیم ، این خاصیت محافظت شده ViewState است (قبلاً مورد بحث قرار گرفته است) که برای انتقال کلید Cache Unique برای دسترسی به متغیر Cache هنگام بارگذاری و همچنین هنگام حذف پرونده استفاده می شود.

<link rel="Stylesheet" type="text/css" href="CSS/uploadify.css" />
<script type="text/javascript" src="scripts/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="scripts/jquery.uploadify.js"></script>
<script type="text/javascript">
    $(function () {
        $("[id*=FileUpload1]").fileUpload({
            'uploader': 'scripts/uploader.swf',
            'cancelImg': 'images/cancel.png',
            'buttonText': 'Attach Files',
            'script': 'UploadCS.ashx',
            'folder': 'uploads',
            'multi': true,
            'auto': true,
            'scriptData': {key:'<%=Key %>'},
            'onSelect': function (event, ID, file) {
                $("#attachedfiles tr").each(function () {
                    if ($("td", this).eq(0).html() == file.name) {
                        alert(file.name + " already uploaded.");
                        $("[id*=FileUpload1]").fileUploadCancel(ID);
                        return;
                    }
                });
            },
            'onComplete': function (event, ID, file, response, data) {
                $("#attachedfiles").append("<tr><td>" + file.name + "</td><td><a href = 'javascript:;'>[x]</a></td></tr>");
            }
        });
    });
</script>

فایلها از طریق Generic Handler Upload.ashx بارگذاری می شوند . فایل های آپلود شده را در حافظه پنهان ذخیره می کنیم. همچنین فایلهای آپلود شده به صورت پویا در صفحه نمایش داده می شوند.
کلید Cache Unique از طریق Uploadify Plugin به Handler منتقل شده است
C #

<%@ WebHandler Language="C#" Class="UploadCS" %>
using System;
using System.Web;
using System.IO;
using System.Collections.Generic;
public class UploadCS : IHttpHandler {
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        context.Response.Expires = -1;
        try
        {
            List<HttpPostedFile> files = (List<HttpPostedFile>)context.Cache[context.Request.QueryString["key"]];
            HttpPostedFile postedFile = context.Request.Files["Filedata"];
            files.Add(postedFile);
            string filename = postedFile.FileName;
            context.Response.Write(filename);
            context.Response.StatusCode = 200;
        }
        catch (Exception ex)
        {
            context.Response.Write("Error: " + ex.Message);
        }
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }
}

VB.Net

<%@ WebHandler Language="VB" Class="UploadVB" %>
Imports System
Imports System.Web
Imports System.IO
Imports System.Collections.Generic
Public Class UploadVB : Implements IHttpHandler
  
    Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        Try
            Dim files As List(Of HttpPostedFile) = DirectCast(context.Cache(context.Request.QueryString("key")), List(Of HttpPostedFile))
            Dim postedFile As HttpPostedFile = context.Request.Files("Filedata")
            files.Add(postedFile)
            Dim filename As String = postedFile.FileName
            context.Response.Write(filename)
            context.Response.StatusCode = 200
        Catch ex As Exception
            context.Response.Write("Error: " + ex.Message)
        End Try
    End Sub
 
    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property
 
End Class

حذف فایل های پیوست شده با استفاده از jQuery AJAX
 عملکردهایی را برای حذف فایل هایی در مرورگر GMAIL اضافه کرده ایم. برای دستیابی به این هدف از jQuery AJAX و Methods Page استفاده میکنیم .

<script type="text/javascript">
    $("#attachedfiles a").live("click", function () {
        var row = $(this).closest("tr");
        var fileName = $("td", row).eq(0).html();
        $.ajax({
            type: "POST",
            url: "CS.aspx/RemoveFile",
            data: '{fileName: "' + fileName + '", key: "<%=Key %>" }',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function () { },
            failure: function (response) {
                alert(response.d);
            }
        });
        row.remove();
    });
</script>

عملکرد JavaScript فوق باعث می شود با WebMethod تعریف شده در زیر ، فایل را از متغیر Cache که در آن ذخیره شده است حذف کند.
C #

[WebMethod]
public static void RemoveFile(string fileName, string key)
{
    List<HttpPostedFile> files = (List<HttpPostedFile>)HttpContext.Current.Cache[key];
    files.RemoveAll(f => f.FileName.ToLower().EndsWith(fileName.ToLower()));
}

VB.Net

<WebMethod()> _
Public Shared Sub RemoveFile(fileName As String, key As String)
    Dim files As List(Of HttpPostedFile) = DirectCast(HttpContext.Current.Cache(key), List(Of HttpPostedFile))
    files.RemoveAll(Function(f) f.FileName.ToLower().EndsWith(fileName.ToLower()))
End Sub

ارسال ایمیل با پیوست چندگانه
در نهایت کد ارسال ایمیل با استفاده از حساب GMAIL در اینجا آمده است.
C #

protected void btnSend_Click(object sender, EventArgs e)
{
    using (MailMessage mailMessage = new MailMessage())
    {
        mailMessage.From = new MailAddress("user@gmail.com");
        mailMessage.Subject = txtSubject.Text.Trim();
        mailMessage.Body = txtBody.Text.Trim();
        mailMessage.IsBodyHtml = true;
        mailMessage.To.Add(new MailAddress(txtTo.Text.Trim()));
        List<HttpPostedFile> files = (List<HttpPostedFile>)Cache[this.Key];
        foreach (HttpPostedFile file in files)
        {
            mailMessage.Attachments.Add(new Attachment(file.InputStream, Path.GetFileName(file.FileName), file.ContentType));
        }
 
        SmtpClient smtp = new SmtpClient();
        smtp.Host = "smtp.gmail.com";
        smtp.EnableSsl = true;
        System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
        NetworkCred.UserName = mailMessage.From.Address;
        NetworkCred.Password = "<Password>";
        smtp.UseDefaultCredentials = true;
        smtp.Credentials = NetworkCred;
        smtp.Port = 587;
        smtp.Send(mailMessage);
    }
    Cache.Remove(this.Key);
    Response.Redirect(Request.Url.AbsoluteUri);
}


VB.Net

Protected Sub btnSend_Click(sender As Object, e As EventArgs)
    Using mailMessage As New MailMessage()
        mailMessage.From = New MailAddress("user@gmail.com")
        mailMessage.Subject = txtSubject.Text.Trim()
        mailMessage.Body = txtBody.Text.Trim()
        mailMessage.IsBodyHtml = True
        mailMessage.[To].Add(New MailAddress(txtTo.Text.Trim()))
        Dim files As List(Of HttpPostedFile) = DirectCast(Cache(Me.Key), List(Of HttpPostedFile))
        For Each file As HttpPostedFile In files
            mailMessage.Attachments.Add(New Attachment(file.InputStream, Path.GetFileName(file.FileName), file.ContentType))
        Next
 
        Dim smtp As New SmtpClient()
        smtp.Host = "smtp.gmail.com"
        smtp.EnableSsl = True
        Dim NetworkCred As New System.Net.NetworkCredential()
        NetworkCred.UserName = mailMessage.From.Address
        NetworkCred.Password = "<Password>"
        smtp.UseDefaultCredentials = True
        smtp.Credentials = NetworkCred
        smtp.Port = 587
        smtp.Send(mailMessage)
    End Using
    Cache.Remove(Me.Key)
    Response.Redirect(Request.Url.AbsoluteUri)
End Sub

 


دانلود
  • لینک های دانلود دوره های آموزشی تا پایان دوره قابل دانلود می باشد.
  • برای خارج کردن فایل ها از حالت فشرده از ورژن جدید نرم افزار winrar استفاده کنید.
  • برای خارج کردن فایل ها از حالت فشرده لینک های دانلودی که چندین قسمت می باشند فقط قسمت اول را از حالت فشرده خارج کنید.
  • لطفا توضیحات نوشته شده برای مطالب را با دقت بخوانید.
  • برای نمایش فیلم ها می توانید از نرم افزار هایی مانند Km Player , VLC Player یا Media Player Classic استفاده کنید.

ارسال نظر
ارسال پیام به :