الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ارسال صورة ألى ألأيميل من database

بدأه bodee2010 في 16 أغسطس 2010 · 8 رد · 721 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

ارجو من الأخوة ألأعضاء مساعدتى فى هذه المشكلة

عندم أقوم بعرض صورة مخزنة فى database فى صورة binarray dataa

فى grideview أو image

كيف أقوم بأرساله إلى ألإيميل بحيث تظهر كصورة معروضة داخل ألأيميل وليس فى الملحقات

هل يجب تحويله ألى byte او binarray وكيف أقوم بذالك

رجاء التوضيح ببعض ألأكواد أو مثال

أرجوكم محتاجه ألأجابة ضرورى

#2

السلام عليكم ورحمة الله

يمكنك إستخدام LinkedResource

فى أمان الله

Ahmed Moosa

Microsoft Community Contributor | MCC

Microsoft Certified Professional Developer | MCPD

Microsoft Certified Technology Specialist | MCTS

Senior .NET Developer

.Net Trainer

English blog : http://weblogs.asp.net/ahmedmoosa/

مدونة عربى : http://ahmedmoosa.wordpress.com/

#3

السلام عليكم

شكرا لك أخى على أهتمامك

لكن لم تنفع هذه الطريقة

حيث ان الصورة مخزنة فى ال database على هيئة binnarray data

رجاء ذكر مثال

#4
bodee2010 كتب:

السلام عليكم

شكرا لك أخى على أهتمامك

لكن لم تنفع هذه الطريقة

حيث ان الصورة مخزنة فى ال database على هيئة binnarray data

رجاء ذكر مثال

السلام عليكم ورحمة الله

دعنا نتفق فى البداية أن حل المشكلة التى نحن بصددها هو إستخدام LinkedResource . وما علينا الإن هو معرفة كيفية العمل معها .

وفى حالتنا هذة الصورة على هيئة Binary فى قاعدة بيانات وهذة هى المعطيات التى معنا . ونريد إرسال بريد بها .

إليك الكود المستخدم (مع العلم لم يتم التجربة )

 protected void Page_Load(object sender, EventArgs e)
    {
        string query_di = Request.QueryString["ID"];
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
        {
            using (SqlCommand comm = new SqlCommand("SelectFileByID", conn))
            {
                comm.CommandType = CommandType.StoredProcedure;
                conn.Open();
                comm.Parameters.AddWithValue("@id", query_di);
                SqlDataReader reader = comm.ExecuteReader();
                while (reader.Read())
                {
                    string Htmlbody = "<img src=cid:" + reader.GetString(1) + "/>";
                    MemoryStream ms = new MemoryStream(reader.GetSqlBinary(2).Value);
                    System.Net.Mime.ContentType cp = new System.Net.Mime.ContentType (reader.GetString(3));
                    AlternateView alv = default(AlternateView);
                    alv = AlternateView.CreateAlternateViewFromString(Htmlbody);
                    LinkedResource lr = new LinkedResource(ms ,cp );
                    lr.ContentId = reader.GetString(1);
                    alv.LinkedResources.Add(lr);
                    SendMail(alv, Htmlbody);
                }
            }
        }
    }
    void SendMail(AlternateView altView , string htmlbody )
    {
        MailMessage msg = new MailMessage("from", "to", "subject ", htmlbody);
        msg.AlternateViews.Add(altView);
        SmtpClient smtp = new SmtpClient("host");
        smtp.Send(msg);
    }

يجب ان تغير وتبدل إسماء الحقول الخاصة بك , رجاء عند إتمام العملية بنجاح أن تخبرنا .

فى امان الله .

Ahmed Moosa

Microsoft Community Contributor | MCC

Microsoft Certified Professional Developer | MCPD

Microsoft Certified Technology Specialist | MCTS

Senior .NET Developer

.Net Trainer

English blog : http://weblogs.asp.net/ahmedmoosa/

مدونة عربى : http://ahmedmoosa.wordpress.com/

#5

شكرا لك أخى للأهتمامك

ولكن هذه الطريقة لم تفلح

أرجو من ألأخوة أصحاب ألأخبرة أن يفيدونا بالطريقة ألأكيدة

#6

السلام عليكم ورحمة الله

ما رأيك إن قلت لك إنى أجريت بعض التعديل البسيط فى الكود السابق, وكذلك بعد التجربة الحية وقد تم المطلوب وهو إرسال الرسالة ومعها الصورة معروضة وليست على هيئة مرفقات . مع العلم انها كانت على هيئة Binary فى قاعدة بيانات .

؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

وللعلم LinkedResource قرأت عنها فى أكثر من كتاب ومنتدى وموقع . وهى لما ذكرنا من قبل ولكنك لم تصدق .

الحمد لله رب العالمين

تم تعديل هذه المشاركة بواسطة Ahmed Moosa في 21 أغسطس 2010 في 10:07

Ahmed Moosa

Microsoft Community Contributor | MCC

Microsoft Certified Professional Developer | MCPD

Microsoft Certified Technology Specialist | MCTS

Senior .NET Developer

.Net Trainer

English blog : http://weblogs.asp.net/ahmedmoosa/

مدونة عربى : http://ahmedmoosa.wordpress.com/

#7

السلام عليكم

هل يمكنك شرح هذه الجملة

using (SqlCommand comm = new SqlCommand("SelectFileByID", conn))

ولماذا لاأضيف أستعلام مباشرة مثل هذا

Dim cmd As SqlCommand = New SqlCommand("select img from main_view where id=8", con)

وما هو المقصود برقم 2 فى GetSqlBinary(2).Value

MemoryStream ms = new MemoryStream(reader.GetSqlBinary(2).Value);

من فضلك قم بشرح الكود

وشكرا للأهتمامك

#8
bodee2010 كتب:

السلام عليكم

هل يمكنك شرح هذه الجملة

using (SqlCommand comm = new SqlCommand("SelectFileByID", conn))

ولماذا لاأضيف أستعلام مباشرة مثل هذا

Dim cmd As SqlCommand = New SqlCommand("select img from main_view where id=8", con)

وما هو المقصود برقم 2 فى GetSqlBinary(2).Value

MemoryStream ms = new MemoryStream(reader.GetSqlBinary(2).Value);

من فضلك قم بشرح الكود

وشكرا للأهتمامك

السلام عليكم وحمة الله

إنتظر مثال فى هذة الموضوع

اما عن الأسئلة :

جملة Using لها إستخدامان وهو لإدراج Namespace وهذا المعروف لدى الكثير والثانى الذى رأيت وتستخدم للتأكد أن دالة Dispose() قم تم إعلانها للمتغير الذى تم تعريفه داخل Using وهى من الممارسات الحسنة عند التعامل مع قواعد البيانات والإتصال بها للتأكد من ان الإتصال قد تم إغلاقه وتفريغه من الذاكرة وهذا عمل دالة Dispose() لمن لا يعرف .

اما عن SelectFileByID فهذا جملة الإستعلام وهو على هيئة Stored Procedure وبه جملة الإستعلام وإسترجاع الصورة التى تريد بواسطة إستخدام ID مميز للصورة .

اما عن رقم 2 فى GetSqlBinary(2).Value : فيشير إلى الحقل رقم 3 وهو حقل محتويات الصورة من نوع Binary .

فى امان الله

Ahmed Moosa

Microsoft Community Contributor | MCC

Microsoft Certified Professional Developer | MCPD

Microsoft Certified Technology Specialist | MCTS

Senior .NET Developer

.Net Trainer

English blog : http://weblogs.asp.net/ahmedmoosa/

مدونة عربى : http://ahmedmoosa.wordpress.com/

#9

شكرا لك أخى العزيز

قد وجدت الحل

وهو فى تحويل الصورة من قاعدة البيانات إلى byte

Dim con As New SqlConnection("Data Source=abdo\SQLEXPRESS;Database=STORE;Trusted_Connection=yes;User Id=;Password=")

con.Open()

Dim com As New SqlCommand("select img from main_view where id=8", con)

com.CommandType = CommandType.Text

Dim r As SqlDataReader = com.ExecuteReader

While r.Read

MsgBox(r.Item("img").ToString())

Dim BodyText As String = "This is my company's logo: <br><img src=cid:TNTlogo><br>http://www.takenote.com"

Dim MediaType As String = "text/html"

Dim HTMLContent As AlternateView = AlternateView.CreateAlternateViewFromString(BodyText, Nothing, MediaType)

'create the LinkedResource (embedded image)

Dim b As Byte() = CType(r.Item("img"), Byte())

Dim ms As New MemoryStream(b)

Dim CompanyLogo As New LinkedResource(ms, "image/jpeg")

CompanyLogo.ContentId = "TNTlogo"

'add the LinkedResource to the appropriate view

HTMLContent.LinkedResources.Add(CompanyLogo)

m.AlternateViews.Add(HTMLContent)

s.Send(m)

End While

لكن هناك مشكلة أخرى

فى حال إن أردة أضافة صورة من ملف ال images من الموقع

كيف أجبر البرنامج على أستخدام مسار فولدر ال images الخاص بالموقع

مواضيع مشابهة