עבור לתוכן

קליינט SMTP ב Python

Featured Replies

פורסם

התחלתי לכתוב קליינט פשוט ל STMP ב python, אבל מהר מאוד נתקלתי בבעיה.

from socket import *
from string import *
import os

s = socket(AF_INET, SOCK_STREAM)
server = "out.bezeqint.net"
port = 25
try:
s.connect((server, port))
except:
print "connection failed!"
exit(1)


data = s.recv(1000)
code = split(data, " ", 1)[0]
ok = code == "220"
if not ok :
print "error connecting to server"
exit(1)

compname = os.environ['COMPUTERNAME']

s.sendall("HELO " + compname)
data = s.recv(1000)
code = split(data, " ", 1)[0]
ok = code == "250"
if not ok :
print "error saying HELO to server"
s.close()
exit(1)

s.close()

הבעיה היא שהתוכנית נתקעת ב data = s.recv(1000 השני, שאחרי s.sendall("HELO " + compname.

ההשערה שלי היא ש sendall משום מה לא שולח את ההודעה לשרת, והקליינט שלי מחכה לתשובה שהשרת לא שולח בכלל.

לפני שהתחלתי לכתוב שלחתי בעזרת telnet אימייל בצורה הזו והצלחתי.

מישהו יכול לומר מהי הבעיה?

פורסם

שרת ה-SMTP מזהה את סוף החבילה לפי ירידת שורה ("\n")

לכן, תחליף את:


s.sendall("HELO " + compname)

ב:


s.sendall("HELO " + compname + "\n")

פורסם
  • מחבר

אההה, נכון, איך שכחתי..

תודה רבה על העזרה :)

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים