בעיה מוזרה

Admini

New member
בעיה מוזרה

Response.Write(mMsg.Parts(4).sData)​
מחזיר שגיאה: Object reference not set to an instance of an object. לעומת זאת, בתוך הפונקציה שיצרה את האובייקט Parts:
Return Parts(4).sData​
עובד יפה... אם ניגשים מפונקציה אחרת זה לא עובד. קצת פרטים: הכרזה על המערך של : Parts
Public Parts(100) As MessagePart​
יש למישהו רעיון ?
 

Admini

New member
אז ככה

mMsg = הודעה. Parts = מערך עם חלקי ההודעה <אובייקט שלי>​
כאשר אני ניגש לאובייקט parts מתוך הפונקציות שיוצרות אותו אין בעיות כאשר אני ניגש אליו מבחוץ מוחזרת השגיאה דלעיל (Object reference not set to an instance of an object)
 

gilad g

New member
תראה את הקוד של הפונקציה,

ואיך אתה קורא לה, וכו'.
 

Admini

New member
---->

מתוך האובייקט Message: קריאה לפונקציה שיוצרת את part (מתוך האובייקט Message):
DecodeMIMEPart(sMail, 0)​
הכרזת part יחיד:
Function DecodeMIMEPart(ByVal sMail As String, ByVal iID As Integer) As String Dim pPart As New MessagePart() Dim sCoding, sType As String Dim sTemp As String pPart.sRaw = sMail pPart.iSize = Len(sMail)​
ובהמשך
pPart.sData = DecodeMailMessage(sMail, sType, "", sCoding)​
הפונקציה decodeMailMessage מחזירה סטרינג תקין Parts(iID) = pPart iMimeParts = iID כאן אם נוסיף Return parts(iID).sData זה יעבוד. הקוד הבעייתי (מתוך test.aspx.vb):
Response.Write(mMsg.Parts(4).sData)​
 

gilad g

New member
תראה לי איך אתה יוצר את mMsg...

יש פונקציה שמחזירה אותו?
 

Admini

New member
---->

יש פונקציה שמחזירה מערך של mMsg שקוראת לפונקציה שיוצרת אותו. במקרה שלנו ניגשים ישירות לפונקציה שיוצרת אותו. לגבי Parts - יש פונקציות של Message: 1. DoParts - שבונה את המערך 2. DecodeMIMEPart - מקבלת סטרינג של חלק והופכת אותו לאובייקט. האובייקט אינו מוחזר אלא נשמר במערך של Parts (שזה mMsg.Parts). גישה לכל פרמטר אחר של mMsg עוברת ללא תקלות. במקרה שלנו, אני בונה עמוד ניסוי שבונה את mMsg ככה:
mMsg = pop.MailHeaders(pop.ReadFileData(pop.getMailboxFolder() & "\18488964F2A841B98087AAF3957E8F.MAI"))​
 

gilad g

New member
קוד../images/Emo70.gif../images/Emo70.gif

תראה יותר קוד
אני לא יכול להבין כשאתה מדבר ככה באויר
 

Admini

New member
OK... הבנתי

הכרזות ב-Message:
Public sSubject, sFrom, sTO, sBCC, sBody, sDate, sMailID, sRaw, sCC, sError, sMIMEType As String Public POPObject As POP3 Public Headers As Hashtable Public Parts() As MessagePart Public iMimeParts, iSize As Integer Public bMultiPart As Boolean​
Message.DoParts:
Function DoParts() As String Dim sMail As String = sRaw Dim i As Integer sMail = Mid(sMail, InStr(sMail, vbCrLf & vbCrLf) + 4) Dim sCT As String Dim aCT aCT = Split(Replace(Headers("Content-Type"), " ", " "), "; ") sCT = aCT(0) Dim aMIME If sCT = "multipart/mixed" Or sCT = "multipart/alternative" Then bMultiPart = True aMIME = Split(sMail, vbCrLf & "--") For i = 1 To UBound(aMIME) - 1 DecodeMIMEPart(aMIME(i - 1), i) Next Else DecodeMIMEPart(sMail, 0) End If End Function​
Message.DecodeMimePart:
Function DecodeMIMEPart(ByVal sMail As String, ByVal iID As Integer) As String Dim pPart As New MessagePart() Dim sCoding, sType As String Dim sTemp As String pPart.sRaw = sMail pPart.iSize = Len(sMail) Dim iStart, iEnd As Integer If bMultiPart = True Then iStart = InStr(sMail, vbCrLf) iEnd = InStr(iStart, sMail, vbCrLf & vbCrLf) If iEnd = 0 Then iEnd = iStart sTemp = Mid(sMail, iStart + 2, iEnd - iStart) Dim ht As Hashtable = POPObject.CreateHeaderHashtable(sTemp) sType = ht("Content-Type") sCoding = ht("Content-Transfer-Encoding") If iEnd > 0 Then sMail = Mid(sMail, iEnd + 4) Else sCoding = Headers("Content-Transfer-Encoding") End If pPart.sData = DecodeMailMessage(sMail, sType, "", sCoding) Parts(iID) = New MessagePart() Parts(iID) = pPart iMimeParts = iID End Function​
 

Admini

New member
איזה מהם ?

את Parts בונה (לא מחזירה!) DecodeMIMEPart שנקראת בידי DoParts את mMsg אני לא בונה פה כמערך אלא קורא לו ישירות לפי שם קובץ (הפונקציה שבונה אותו תעזור ?)
 

Admini

New member
המשך:

הכרזת mMsg:
mMsg = pop.MailHeaders(pop.ReadFileData(pop.getMailBoxFolder() & "18488964F2A841B98087AAF3957E8F.MAI"))​
האובייקט Parts:
Public Class MessagePart Public sRaw, sFileName, sData As String Public iSize As Integer Public Headers As Hashtable End Class​
זהו בעצם.
 
למעלה