اذهب إلى المحتوى
  • 0

كيف أعمل إرفاق لصورة بغرض إرسالها لبريد الكتروني (ASP.NET with C#)

كان هنا شخص ما

السؤال

السلام عليكم،

لدي صفحة بإسم (SelectCard.aspx) فيها مجموعة من الصور، هذه الصور مُخزنة في قاعدة البيانات محفوظة على شكل مسار الصورة (مكان الصورة الفيزيائي ضمن ملفات المشروع file path)، ولدى كل صورة معرف id خاص بها، وهذه الصور معروضة في صفحة (SelectCard.aspx) بإستخدام GridView، وتحت كل صورة Link وهذا الكود الخاص به:

<asp:HyperLink ID="HyperLink1" runat="server" Text="Detailed / Edit"  NavigateUrl='<%# Eval("Card_id", "~/send-card.aspx?Id={0}") %>'>Select Card</asp:HyperLink>

وهذا الكود الخاص بالصورة نفسها:

<asp:Image ID="Image1" runat="server" Height="194px" Width="188px" ImageUrl='<%# Eval("Card_Path") %>' />

عندما يتم الضغط على الرابط، يتم التحول الى صفحة ثانية اسمها (send-card.aspx)، ويتم عرض txtbox فيه الـID الخاص بالصورة، وهنالك txtbox فيه امكانية كتابة ايميل الشخص المرسل له، وايضاً يتم عرض Image Control فيه الصورة نفسها التي اختارها الشخص من الصفحة الاولى، وهنالك textbox = multiline يتم كتابة رسالة فيه، وآخيراً هنالك زر للارسال.
الان كل شيء يعمل عندما اكتب إيميل الشخص والرسالة، ولكن الصورة التي هي موجودة في الـImage Control لا يتم ارسالها، بعد بحث في الانترنت علمت انه يجب عمل Attachment، وهذا الـ(attachment) يحتاج الى مسار الصورة المُختارة أو المعروضة في الـImage Control .. ولكن حاولت بكل الطرق جلب مسار الصورة، يعني أريد مسار الصورة الموجوة في صندوق الصورة لكي أضعه داخل attachment ، لا اعرف كيف استخرجه.
هذا الكود (سي شارب) الخاص بصفحة send-card لكي يتضح  الامر..

public partial class send_card : System.Web.UI.Page
{
    // Creating connection
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["eg"].ConnectionString);
    protected void Page_Load(object sender, EventArgs e)
    {
        // Getting ID number from selected card and pass it to ID textbox
        txt_id.Text = Request.QueryString["id"].ToString();
        // Open connection
        conn.Open();
        // Selecting the specific image based on the retrieved id number from the textbox
        SqlCommand cmd = new SqlCommand("Select * from Cards where Card_ID ='" + txt_id.Text + "'", conn);
        SqlDataReader dr = cmd.ExecuteReader();
        
        while(dr.Read())
        {
            SelectedImg.ImageUrl = dr["Card_Path"].ToString();
        }
        conn.Close();
    }
    // A method which used to created AlertBox
    public void AlertBox(string msg)
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        sb.Append("<script type = 'text/javascript'>");
        sb.Append("window.onload=function(){");
        sb.Append("alert('");
        sb.Append(msg);
        sb.Append("')};");
        sb.Append("</script>");
        ClientScript.RegisterClientScriptBlock(this.GetType(), "alert", sb.ToString());
    }
    protected void btn_send_Click(object sender, EventArgs e)
    {
        // Open connection
        conn.Open();
        // ********************   Code for sending the mail
        System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
        mail.To.Add(email2.Text);
        mail.From = new MailAddress("abuhussam@mymail.com", "E-Greetings", System.Text.Encoding.UTF8);
        mail.Subject = "E-Greetings from :" + email2.Text;
        mail.SubjectEncoding = System.Text.Encoding.UTF8;
        //mail.Attachments.Add(new Attachment(SelectedImg.ImageUrl));


        mail.Body = "Dear User," + "<br><br>" + "You have received one new mail greeeting from E-Greetings Service." + "<br>" + "Your friend message showing as below:" + "<br><br><br>" + txt_body.Text + "<br><br>"  + "<br><br>" + "Thanks & Regards," + "<br>" + "E-Greetings(Admin)";
        mail.BodyEncoding = System.Text.Encoding.UTF8;
        mail.IsBodyHtml = true;
        mail.Priority = MailPriority.High;
        SmtpClient client = new SmtpClient();
        client.Credentials = new System.Net.NetworkCredential("abuhussam@mymail.com", "aa2132e"); // Enter the pwd instead
        client.Port = 25;
        client.Host = "mail.sharewaretech.com";
        client.EnableSsl = false; 
        client.Send(mail);

        // ****************   Code for storing the data inside the database




        Response.Write("<script language='javascript'>window.alert('Mail Sent Successfully<br>click OK to select another card.');window.location='SelectCard.aspx';</script>");
    }
}

ستلاحظ أنني وضعت الكود :

//mail.Attachments.Add(new Attachment(SelectedImg.ImageUrl));

في تعليق لكي لا يتأثر الكود الاصلي، الان بدل كتابة (SelectedImg.ImageUrl) يجب علي كتابة مسار الصورة الموجودة في الImage Control ، وهذه ممكن تكون اكثر من صورة لانهم مخزنين في قاعدة البيانات، فأنا ليس من المعقول ان اعطي مسار صورة واحدة ((بالتحديد))، لذلك علي استخراج المسار من الصورة المختارة من الصفحة الاولى، يعني الصورة الموجودة في الImage Control لانها تم استخراجها من الصفحة الاولى، وأخذ المسار الخاص بها ووضعه في مكان (SelectedImg.ImageUrl).
أتمنى أن الفكرة والمشكلة والسؤال وصل مفهوم، أتمنى المساعدة، واسف على الاطالة..

أرجو المساعدة في إيجاد حل المشكلة، شكراً لكم كثيراً :) ..

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 2

مسار الصورة موجود لديك قمتَ بجلبه من الاستعلام

SqlCommand cmd = new SqlCommand("Select * from Cards where Card_ID ='" + txt_id.Text + "'", conn);

حاول طباعة محتوى SelectedImg.ImageUrl وجرّب إنشاء Label  أو HiddenField وإسناد مسار الصورة لها :

while(dr.Read())
        {
            SelectedImg.ImageUrl = dr["Card_Path"].ToString();

             lbl.Text = dr["Card_Path"].toString();
        }

ثم استبدل SelectedImg.ImageUrl بـ lbl.Text

mail.Attachments.Add(new Attachment(lbl.Text));

حل آخر جرّب إرسال مسار الصورة Card_Path مع معرّف الصورة id ضمن رابط الصفحة الثانية ثم قم باسترجاعه وتمريره لـ mail.Attachments.Add():

mail.Attachments.Add(new Attachment(Request.QueryString["CardPath"].ToString()));

 

ملاحظة: استخدم الإشارة @ في بداية كتابتك للسلسلة النصّية String ليسهّل عليك كتابة الجمل واستعلامات SQL الطويلة على عدّة أسطر وبالتالي سهولة قراءتها:

mail.Body = @"Dear User," + "<br><br>" 
+ "You have received one new mail greeeting from E-Greetings Service."
+ "<br>" + "Your friend message showing as below:"
+ "<br><br><br>" + txt_body.Text + "<br><br>"  + "<br><br>" 
+ "Thanks & Regards," + "<br>" + "E-Greetings(Admin)";

بالتوفيق

تم التعديل في بواسطة Lujain
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

حسنًا أول خطوة يجب أن يأخذ المسار الشكل التالي بدون /~:

Cards/birthday-10.jpg

ولعمل ذلك اكتب الشيفرة التالية:

String myNewPath = SelectedImg.ImageUrl.Substring(2);

اعتمد طريقتك السّابقة ولكن مرر المسار كما في المثال التالي: 

 

MailAttachment attachment = new MailAttachment( Server.MapPath(myNewPath) );

mail.Attachments.Add( attachment );	//add the attachment

لتصبح الشيفرة الكاملة على الشكل التالي:

System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
        mail.To.Add(email2.Text);
        mail.From = new MailAddress("abuhussam@mymail.com", "E-Greetings", System.Text.Encoding.UTF8);
        mail.Subject = "E-Greetings from :" + email2.Text;
        mail.SubjectEncoding = System.Text.Encoding.UTF8;

String myNewPath = SelectedImg.ImageUrl.Substring(2);
MailAttachment attachment = new MailAttachment( Server.MapPath(myNewPath) );
mail.Attachments.Add( attachment );	//add the attachment

 

بالتوفيق

تم التعديل في بواسطة Lujain
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

هذه الطريقة الثانية ((للإستفادة)) تمرير أكثر من قيمة في رابط الصفحة URL:

<asp:HyperLink ID="HyperLink1" runat="server" Text="Detailed / Edit"  NavigateUrl='<%# String.Format("~/send-card.aspx?Id={0}&Path={1}", DataBinder.Eval(Container.DataItem, "Card_id"), DataBinder.Eval(Container.DataItem, "Card_Path"))%>'>Select Card</asp:HyperLink>

 

تم التعديل في بواسطة Lujain
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

شكراً لك "Lujain" إستخدمت الطريقة الاولى، وهي بإسناد مسار الصورة للـlbl_imgpath، وهو عبارة عن TextBox في الصفحة أمرر له قيمة مسار الصورة عن طريق الImgUrl، ولكن عند استخدامها داخل الـAttachment يعطيني مشكلة بعدم إيجاد المسار الخاص بالصورة رغم انني متأكد بأن المسار تم طباعته في الـTextBox الاضافي بشكل صحيح 100%. لذلك اريد استخدام الطريقة الثانية بتمرير Card_Path إلى عنوان الصفحة، كيف يمكنني عمل ذلك، أي تمريره لعنوان الصفحة؟ حيث الان أستطيع أن امرر الـid الخاص بالصورة، ولكن لا اعرف طريق تمرير العنوان الخاص بالصورة في عنوان الصفحة، هذا مثال لرابط الصفحة بعد الضغط على أي رابط لصورة ما من الصفحة الاولى:
 

http://localhost:20133/send-card.aspx?Id=16

كيف يمكنني إضافة بعد الـid ، الـpath الخاص بالصورة لكي أستخدمه لاحقاً لعمل ارفاق للصورة في الايميل؟ أرجو إعطاءي التفاصيل لأنني بحثت جيداً لساعات عديدة. وشكراً لك جزيلاً على المساعدة ^_^

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

المسار الذي يظهر لي في الـTextBox هكذا بالضبط: (للصورة رقم 16 من صور عيدالميلاد)
 

~/Cards/birthday-10.jpg

طبعاُ الصور مخزنة في مجلد المشروع الذي اسمه (Cards) و مسار الصورة (Card_Path) ، مع الid محفوظ في قاعدة البيانات الخاصة بالمشروع ايضاً.

تم التعديل في بواسطة ABU_HUSSAM
إضافة نص
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...