התחברות לשרתי POP3

‏ • 30 בנובמבר, 2005

בשוק ישנם כמה אובייקטים להתחברות באמצעות קוד לשרת POP3 וקבלת דואר אלקטרוני.
דבר זה יכול להועיל במגוון דרכים, מיצירת WEBMAIL שמאפשר למשתמשים למשוך את הדוא"ל האישי שלהם מכל שרת POP3 (אינטרנט זהב,בזק בינ"ל, GMAILוכו') ועד להפעלת סקריפטים שונים המתבססים על מידע שהגיע במייל.

בדוגמא זו נשתמש בJMAIL:
לצורך הקלת הגישה למשתמש לחשבון הדוא"ל שלו נכין דאטה בייס עם העמודות הבאות:


  • pop3 – שדה טקסט שיכיל את כתובת הPOP3 של השרת
  • server_name – שיכיל את שם ידידותי לשרת
  • port – שיכיל את הפורט גישה לדואר הנכנס, ברובם זה יהיה 110, לGMAIL יש פורט שונה
צד לקוח: נציג ללקוח טופס שיורכב משני שדות טקסט, אחד לשם משתמש ואחד לסיסמא ותיבת בחירה שתכיל את כל הרשומות שנמלא מבעוד מועד לדאטה בייס
המשתמש ימלא את השדות ויבחר בשרת החביב עליו

צד שרת: נקבל את המשתנים מהטופס לתוך משתנים ונבצע שליפה של הפורט והשרת POP3 מהדאטה בייס בהתאם לבחירת הלקוח.











1
2
3
4
5
6
7
8
9
10
11
12
13
14  








<%
sql="select * from servers where serverID=" & request.form("server")
oRs.open sql,Conn,3,1
session("server")=oRs("server")
session("user")=request.form("user")
session("pass")=request.form("pass")
session("port")=oRs("port")
oRs.close

user=session("user")
pass=session("pass")
server1=session("server")
port=session("port")
%>


עכשיו נוכל לגשת לאובייקט ולבצע שליפה של ההדוא"ל:

קודם נמנע שגיאה אפשרית של TIMEOUT:











1








server.ScriptTimeout=99999999


אח"כ נוודא שיש לנו לפחות נתון אחד שיעיד על כך שאנחנו יכולים לגשת לשרת:











1
2








if port<>"" then
Set pop3 = Server.CreateObject( "JMail.POP3" )


ההתחברות לשרת תעשה כאשר שם המשתמש והסיסמה תמיד יהיו באותיות קטנות (אין דבר כזה מייל באותיות גדולות):











1








pop3.Connect lcase(user), lcase(pass), server1,port


נציין כמה הודעות ממתינות למשתמש בשרת:











1








Response.Write( "You have " & pop3.count & " emails in your mailbox!<br>" & session("server"))


אם יש יותר מ0 הודעות נתחיל את הלופ:











1
2
3
4
5
6  








<%if pop3.count > 0 then%>
<table>
    <%for i=1 to pop3.count 't%>
    <tr>
    <td><%=pop3.Messages.item(i).subject%></td>
    <td><%=pop3.Messages.item(i).Date%></td>


ניצור לינק מיוחד שיאפשר למשתמש לפתוח את ההודעה ספציפית











1
2
3  








<td><a href="webmail.asp?id=<%=pop3.GetMessageUID(i)%>">open</a></td>
</tr>



במידה והמשתמש ביקש לפתוח את ההודעה הספציפית נשתמש בתנאי כדי להצוציא את ההודעה החוצה לקריאה:











1
2
3
4
5
6
7
8
9
10  








    <%
    if request.querystring("id")<>"" then
        if pop3.GetMessageUID(i)=request.querystring("id") then
            set msg=pop3.Messages.item(i)
            exit for
        end if
    end if
    next%>
</table>
<%end if%>


נוכל גם לקבל חיווי על ההודעה האחרונה שהגיעה ושלא נקראה:











1
2
3
4  








<%
lastMessage = pop3.GetLastUnreadMessage
response.write "<br>Lust messege<br>" & pop3.Messages.item(lastMessage).subject
%>


הצגת הודעה ספציפית (במידה והמשתמש לחץ על הלינק למעלה)











1








if request.querystring("id")<>"" then


נאתחל משתנים:











1
2
3
4
5








ReTo = ""
ReCC = ""

Set Recipients = msg.Recipients
separator = ", "


נבדוק את נמעני ההודעה:











1
2
3
4
5
6
7
8
9
10
11
12








For i = 0 To Recipients.Count – 1
  If i = Recipients.Count – 1 Then
    separator = ""
  End If

  Set re = Recipients.item(i)
  If re.ReType = 0 Then
    ReTo = ReTo & re.Name & " (" & re.EMail & ")" & separator
  else
    ReCC = ReTo & re.Name & " (" & re.EMail & ")" & separator
  End If
Next


ניצור פונקציה שמטפלת בקבצים המצורפים:











1
2
3
4
5
6
7
8
9
10








Function getAttachments()
  Set Attachments = msg.Attachments
   separator = ", "

  For i = 0 To Attachments.Count – 1
    If i = Attachments.Count – 1 Then
      separator = ""
    End If

  Set at = Attachments(i)


נבדוק במאצעות FSO אם הקובץ לא קיים על השרת, אם הוא קיים נמחוק אותו ונאפשר שמירה של הקובץ המצורף במקומו











1
2
3
4
5
6
7
8
9
10








  dim filesys, filetxt, getname, path ,demofile
  Set filesys = CreateObject("Scripting.FileSystemObject")
  file= at.Name
  path = filesys.GetAbsolutePathName(server.mappath("/jmail/att") & "/" & file )
  response.write path
  If filesys.FileExists(path) Then
      set demofile = filesys.GetFile(path)
    demofile.Delete
  end if
  set filesys=nothing


נשמור את הקובץ מהמייל לשרת ונציג קישור אליו











1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28








  response.write "<br>" & path
  at.SaveToFile( path )
  getAttachments = getAttachments & "<a href=""att/" & file &""">" & file & "(" & at.Size & " bytes)</a>" & separator
  Dim FSO
  Set fso = Server.CreateObject("Scripting.FileSystemObject")
  Set demofile = fso.GetFile(path)
  Next
End Function

'start working on the file
   
%>
<br />
<b><%= msg.Subject %></b><br />
From: <%= msg.FromName %><br />
To: <%= ReTO %><br />
CC: <%= ReCC %><br />
<hr />
<%= msg.Body %>
<% getAttachments %>

<%end if%>

<%
end if
pop3.Disconnect
end if
%>


בתוך החלק האחרון יש גם עבודה מסוימת עם FSO שבודקת עם קובץ בשם זהה כבר קיים בשרת כדי למנוע שגיאה שהJMAIL זורק במידה ומתבצעת שמירה של קובץ מצורף בעל שם זהה לזה הקיים בשרת. אפשר להתחכם פה יותר

אז מה היה לנו כאן?

התחברות לPOP3 עם JMAIL, בצורה הכי בסיסית שיש, אפשר להתחכם פה יותר ובמיוחד להשקיע בצד לקוח.

תיעוד ניתן למצוא כאן
דוגמא חיה ניתן למצוא כאן

בהצלחה

תגיות: , , , , ,

תגובות בפייסבוק