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

دریافت و خواندن پیغام های ایمیل با پیوست از سرور پست الکترونیکی GMAIL POP3 در ASP.Net
0 0
دریافت و خواندن پیغام های ایمیل با پیوست از سرور پست الکترونیکی GMAIL POP3 در ASP.Net

با سلام در این مقاله نحوه خواندن ایمیل ها را از سرور ایمیل POP3 با استفاده از open source کتابخانه OpenPop.Net   توضیح خواهیم داد . این کتابخانه API  برای دسترسی و خواندن ایمیل ها از سرورهای Mail POP3 را فراهم می کند. برای این مقاله از Gmail Mail POP3 استفاده خواهم کرد
دانلود OpenPop.Net
شما می توانید OpenPop.Net را با استفاده از لینک دانلود زیر دانلود کنید
دانلود OpenPop.Net
کد HTML
در اینجا از کنترل GridView برای نمایش پیام های ایمیل استفاده کرده ایم. بدنه ایمیل را در یک HTML SPAN پنهان نگه میداریم چون بعد از استفاده از محاوره ی جی کوئری برای نشان دادن بدنه زمانی که موضوع کلیک شود استفاده می شود.

<asp:GridView ID="gvEmails" runat="server" OnRowDataBound="OnRowDataBound" DataKeyNames="MessageNumber"
    AutoGenerateColumns="false">
   <Columns>
        <asp:BoundField HeaderText="From" DataField="From" HtmlEncode="false" />
        <asp:TemplateField HeaderText="Subject">
            <ItemTemplate>
                <asp:LinkButton ID="lnkView" runat="server" Text='<%# Eval("Subject") %>' />
                <span class="body" style="display: none">
                    <%# Eval("Body") %></span>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField HeaderText="Date" DataField="DateSent" />
        <asp:TemplateField ItemStyle-CssClass="Attachments">
            <ItemTemplate>
                <asp:Repeater ID="rptAttachments" runat="server">
                    <ItemTemplate>
                        <asp:LinkButton ID="lnkAttachment" runat="server" OnClick="Download" Text='<%# Eval("FileName") %>' />
                    </ItemTemplate>
                    <SeparatorTemplate>
                        <br>
                    </SeparatorTemplate>
                </asp:Repeater>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<div id="dialog" style="display: none">
    <span id="body"></span>
    <br />
    <span id="attachments"></span>
</div>

فضاهای نام
شما باید فضای نامهای زیر را وارد کنید
C #

using OpenPop.Pop3;
using OpenPop.Mime;
using System.Linq;

VB.Net

Imports OpenPop.Pop3
Imports OpenPop.Mime
Imports System.Linq

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

[Serializable]
public class Email
{
    public Email()
    {
        this.Attachments = new List<Attachment>();
    }
    public int MessageNumber { get; set; }
    public string From { get; set; }
   public string Subject { get; set; }
    public string Body { get; set; }
    public DateTime DateSent { get; set; }
    public List<Attachment> Attachments { get; set; }
}
 
[Serializable]
public class Attachment
{
    public string FileName { get; set; }
    public string ContentType { get; set; }
    public byte[] Content { get; set; }
}

VB.Net

<Serializable()> _
Public Class Email
    Public Sub New()
        Me.Attachments = New List(Of Attachment)()
    End Sub
    Public Property MessageNumber() As Integer
        Get
            Return m_MessageNumber
        End Get
        Set(value As Integer)
            m_MessageNumber = Value
        End Set
    End Property
    Private m_MessageNumber As Integer
    Public Property From() As String
        Get
            Return m_From
        End Get
        Set(value As String)
            m_From = Value
        End Set
    End Property
    Private m_From As String
    Public Property Subject() As String
        Get
            Return m_Subject
       End Get
        Set(value As String)
            m_Subject = Value
        End Set
    End Property
    Private m_Subject As String
    Public Property Body() As String
        Get
            Return m_Body
        End Get
        Set(value As String)
            m_Body = Value
        End Set
    End Property
    Private m_Body As String
    Public Property DateSent() As DateTime
        Get
            Return m_DateSent
        End Get
        Set(value As DateTime)
            m_DateSent = Value
        End Set
    End Property
    Private m_DateSent As DateTime
    Public Property Attachments() As List(Of Attachment)
        Get
            Return m_Attachments
        End Get
        Set(value As List(Of Attachment))
            m_Attachments = Value
        End Set
    End Property
    Private m_Attachments As List(Of Attachment)
End Class
 
<Serializable()> _
Public Class Attachment
    Public Property FileName() As String
        Get
            Return m_FileName
        End Get
        Set(value As String)
            m_FileName = Value
        End Set
    End Property
    Private m_FileName As String
    Public Property ContentType() As String
        Get
            Return m_ContentType
        End Get
        Set(value As String)
            m_ContentType = Value
        End Set
    End Property
    Private m_ContentType As String
    Public Property Content() As Byte()
        Get
            Return m_Content
        End Get
        Set(value As Byte())
            m_Content = Value
        End Set
    End Property
    Private m_Content As Byte()
End Class

توجه :

این کلاس ها را به عنوان Serializable مشخص کرده ایم، زیرا پیام های ایمیل محرمانه را در یک متغیر ViewState برای ذخیره داده ها در PostBacks ذخیره می کنیم.
دریافت پیام های ایمیل از سرور ایمیل POP3 و اتصال آنها به  GridView
کد زیر برای فرستادن پیام های ایمیل از سرور ایمیل POP3 GMAIL است.
1. به سرور ایمیل POP3 با استفاده از نام کاربری و رمز عبور GMAIL وصل میشویم.
2. هنگامی که متصل میشوید، به دنبال گرفتن سه پیام اخیر ایمیل بالا و آنها به ویژگی املا ViewState اضافه کنید نوع آن از کلاس ویژگی سفارشی است. ایمیلی که قبلا ایجاد کردیم
3. در حالی که حلقه را اجرا می کنیم، بررسی می کنیم که آیا در ایمیل وجود دارد و اگر پیامی وجود داشته باشد، پیوست ها را نیز اضافه می کنیم. املاء پیوست ها از کلاس ایمیل که نوع کلاس ویژگی سفارشی است که قبلا ایجاد کرده ایم.
C #

protected List<Email> Emails
{
    get { return (List<Email>)ViewState["Emails"]; }
    set { ViewState["Emails"] = value; }
}
 
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        this.Read_Emails();
    }
}
 
private void Read_Emails()
{
    Pop3Client pop3Client;
    if (Session["Pop3Client"] == null)
    {
        pop3Client = new Pop3Client();
        pop3Client.Connect("pop.gmail.com", 995, true);
        pop3Client.Authenticate("youremail@gmail.com", "password", AuthenticationMethod.TryBoth);
        Session["Pop3Client"] = pop3Client;
    }
    else
    {
        pop3Client = (Pop3Client)Session["Pop3Client"];
    }
    int count = pop3Client.GetMessageCount();
    this.Emails = new List<Email>();
    int counter = 0;
    for (int i = count; i >= 1; i--)
    {
        Message message = pop3Client.GetMessage(i);
        Email email = new Email()
        {
            MessageNumber = i,
            Subject = message.Headers.Subject,
            DateSent = message.Headers.DateSent,
            From = string.Format("<a href = 'mailto:{1}'>{0}</a>", message.Headers.From.DisplayName, message.Headers.From.Address),
        };
        MessagePart body = message.FindFirstHtmlVersion();
        if (body != null)
        {
            email.Body = body.GetBodyAsText();
        }
        else
        {
            body = message.FindFirstPlainTextVersion();
            if (body != null)
            {
                email.Body = body.GetBodyAsText();
            }
        }
        List<MessagePart> attachments = message.FindAllAttachments();
 
        foreach (MessagePart attachment in attachments)
        {
            email.Attachments.Add(new Attachment
            {
                FileName = attachment.FileName,
                ContentType = attachment.ContentType.MediaType,
                Content = attachment.Body
            });
        }
        this.Emails.Add(email);
        counter++;
        if (counter > 2)
        {
            break;
        }
    }
    gvEmails.DataSource = this.Emails;
    gvEmails.DataBind();
}

VB.Net

Protected Property Emails() As List(Of Email)
    Get
        Return DirectCast(ViewState("Emails"), List(Of Email))
    End Get
    Set(value As List(Of Email))
        ViewState("Emails") = value
    End Set
End Property
 
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        Me.Read_Emails()
    End If
End Sub
 
Private Sub Read_Emails()
    Dim pop3Client As Pop3Client
    If Session("Pop3Client") Is Nothing Then
        pop3Client = New Pop3Client()
        pop3Client.Connect("pop.gmail.com", 995, True)
        pop3Client.Authenticate("youremail@gmail.com", "password", AuthenticationMethod.TryBoth)
        Session("Pop3Client") = pop3Client
    Else
        pop3Client = DirectCast(Session("Pop3Client"), Pop3Client)
    End If
    Dim count As Integer = pop3Client.GetMessageCount()
    Me.Emails = New List(Of Email)()
    Dim counter As Integer = 0
    For i As Integer = count To 1 Step -1
        Dim message As Message = pop3Client.GetMessage(i)
        Dim email As New Email()
        email.MessageNumber = i
        email.Subject = message.Headers.Subject
        email.DateSent = message.Headers.DateSent
        email.From = String.Format("<a href = 'mailto:{1}'>{0}</a>", message.Headers.From.DisplayName, message.Headers.From.Address)
 
        Dim body As MessagePart = message.FindFirstHtmlVersion()
        If body IsNot Nothing Then
            email.Body = body.GetBodyAsText()
        Else
            body = message.FindFirstPlainTextVersion()
            If body IsNot Nothing Then
                email.Body = body.GetBodyAsText()
            End If
        End If
        Dim attachments As List(Of MessagePart) = message.FindAllAttachments()
 
        For Each attachment As MessagePart In attachments
            Dim attachmentObj As New Attachment
            attachmentObj.FileName = attachment.FileName
            attachmentObj.ContentType = attachment.ContentType.MediaType
            attachmentObj.Content = attachment.Body
            email.Attachments.Add(attachmentObj)
        Next
        Me.Emails.Add(email)
        counter += 1
        If counter > 2 Then
            Exit For
        End If
    Next
    gvEmails.DataSource = Me.Emails
    gvEmails.DataBind()
End Sub

تصاویر زیر نشان می دهد که GridView  محدود به پیام های ایمیل محرمانه است و فایل های پیوست ایمیل نمایش داده می شوند.

اتصال ضمیمه های ایمیل به Repeater در GridView
از کنترل Repeater در داخل TemplateField از GridView برای پیوست ایمیل استفاده میکنیم. یک Repeater در رویداد OnRowDataBound از GridView پیوند می دهیم .
C #

protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Repeater rptAttachments = (e.Row.FindControl("rptAttachments") as Repeater);
        List<Attachment> attachments = this.Emails.Where(email => email.MessageNumber == Convert.ToInt32(gvEmails.DataKeys[e.Row.RowIndex].Value)).FirstOrDefault().Attachments;
        rptAttachments.DataSource = attachments;
        rptAttachments.DataBind();
    }
}

VB.Net

Protected Sub OnRowDataBound(sender As Object, e As GridViewRowEventArgs)
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim rptAttachments As Repeater = TryCast(e.Row.FindControl("rptAttachments"), Repeater)
        Dim attachments As List(Of Attachment) = Me.Emails.Where(Function(email) email.MessageNumber = Convert.ToInt32(gvEmails.DataKeys(e.Row.RowIndex).Value)).FirstOrDefault().Attachments
        rptAttachments.DataSource = attachments
        rptAttachments.DataBind()
    End If
End Sub

دانلود پیام پیوست ایمیل
هنگامی که نام فایل ضمیمه کلیک می شود، رویداد handler زیر را اجرا می کند که پیوست را از ایمیل PropertyState می گیرد و سپس آن را برای دانلود ارسال می کند.
C #

protected void Download(object sender, EventArgs e)
{
    LinkButton lnkAttachment = (sender as LinkButton);
    GridViewRow row = (lnkAttachment.Parent.Parent.NamingContainer as GridViewRow);
    List<Attachment> attachments = this.Emails.Where(email => email.MessageNumber == Convert.ToInt32(gvEmails.DataKeys[row.RowIndex].Value)).FirstOrDefault().Attachments;
    Attachment attachment = attachments.Where(a => a.FileName == lnkAttachment.Text).FirstOrDefault();
    Response.AddHeader("content-disposition", "attachment;filename=" + attachment.FileName);
    Response.ContentType = attachment.ContentType;
    Response.BinaryWrite(attachment.Content);
    Response.End();
}

VB.Net

Protected Sub Download(sender As Object, e As EventArgs)
    Dim lnkAttachment As LinkButton = TryCast(sender, LinkButton)
    Dim row As GridViewRow = TryCast(lnkAttachment.Parent.Parent.NamingContainer, GridViewRow)
    Dim attachments As List(Of Attachment) = Me.Emails.Where(Function(email) email.MessageNumber = Convert.ToInt32(gvEmails.DataKeys(row.RowIndex).Value)).FirstOrDefault().Attachments
    Dim attachment As Attachment = attachments.Where(Function(a) a.FileName = lnkAttachment.Text).FirstOrDefault()
    Response.AddHeader("content-disposition", "attachment;filename=" + attachment.FileName)
    Response.ContentType = attachment.ContentType
    Response.BinaryWrite(attachment.Content)
    Response.End()
End Sub

مشاهده کادر پیام ایمیل Body Client Side با استفاده از jQuery UI Dialog
Client side زمانی که موضوع را کلیک می کنید، کلید رویداد handler را کلیک کنید. این ایمیل، Subject، Body و Attachments را دریافت می کند و آن را در کادر محاوره jQuery UI نمایش می دهد که در تصویر زیر نشان داده شده است

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.9/jquery-ui.js" type="text/javascript"></script>
<link href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.9/themes/start/jquery-ui.css"
    rel="stylesheet" type="text/css" />
<script type="text/javascript">
    $("[id*=lnkView]").live("click", function () {
        var subject = $(this).text();
        var row = $(this).closest("tr");
        $("#body").html($(".body", row).html());
        $("#attachments").html($(".Attachments", row).html());
        $("#dialog").dialog({
            title: subject,
            buttons: {
                Ok: function () {
                    $(this).dialog('close');
                }
            }
        });
        return false;
    });
</script>

 


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

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