SMTP to HTTP pip
-
בהמשך לדיון כאן
ניסיתי לבנות לעצמי בשביל הספורט שרת SMTP שמפנה את כל המידע ישירות לכתובת HTTP
מצאתי פרוייקט שכתוב בGO, שאיתו אפשר לבנות שרת SMTP מאפס
וכן יש שם תוסף לטיפול במיילים עם fastcgi
לא כל כך הסתדרתי עם הפעלת קבצי PHP מהספריה הנ"ל, אז בניתי תוסף משל עצמי שמפנה הכל לכתובת HTTP המבוקשת.למי שרוצה להשתמש עם זה צריך קומפיילר של GO
וקצת ידע בסיסי איך ליבא ספריות.
יוצרים את הקובץ הבאpackage main import ( "fmt" "github.com/flashmob/go-guerrilla" "github.com/flashmob/go-guerrilla/backends" fastcgi_processor "github.com/ynigun/httpmailpip" ) func main() { done := make(chan bool) cfg := &guerrilla.AppConfig{ LogFile: "stderr", AllowedHosts: []string{"koshercode.dev"}, LogLevel: "debug", BackendConfig: backends.BackendConfig{ "save_process": "HeadersParser|Debugger|FastCGI", "validate_process": "FastCGI", "HttpPipValidate": "http://myurl.com:8090/validate", "HttpPipSave": "http://myurl.com:8091/save", }, } sc := guerrilla.ServerConfig{ ListenInterface: "0.0.0.0:25", IsEnabled: true, } cfg.Servers = append(cfg.Servers, sc) d := guerrilla.Daemon{Config: cfg} d.AddProcessor("FastCGI", fastcgi_processor.Processor) err := d.Start() if err == nil { fmt.Println("Server Started!") } <-done }
בדוגמה הזאת מופעל שרת SMTP בפורט 25 בכתובת 0.0.0.0 (ככה אפשר לגשת לIP החיצוני)
והדומיינים המורשים לקבלת מיילים מוגדרים בAllowedHosts
כשמתקבל מייל, השרת מתחבר לכתובת http://myurl.com:8090/validate לצורך אימות שמהשתמש קיים
ע"י שהוא שולח את הנתונים rcpt_to=test%!k(MISSING)oshercode.dev בGET
בדוגמה הזאת שלחתי מייל שנשלח לכתובתtest@koshercode.dev
(ואני לא יודע למה התווסף ה(MISSING)
באמצע)אם השרת מקבל את התשובה
PASSED
הוא ממשיך לשלב הבא ושולח את כל הנתונים בPOST
לכתובת http://myurl.com:8091/save
עם הסטרינג הבא
ContentType_0=application%2Fx-ini&Filename_0=ext.ini&body=%3Cdiv+dir%3D%22rtl%22%3E052702%3Cimg+src%3D%22https%3A%2F%2Fpxl-mailtracker.com%2Fpixel%2FsvpWQyo6UdrJ5o3q0pJs%3Frid%3DsvpWQyo6UdrJ5o3q0pJs%22+width%3D%221%22+height%3D%221%22+border%3D%220%22%3E%3C%2Fdiv%3E&helo=mail-qv1-f44.google.com&mail_from=sbb0799%40gmail.com&rcpt_to_0=test%40koshercode.dev&remote_ip=209.85.219.44&subject=test&tls_on=false
(זה יצא קצת מבולגן אז אני ילך לא לפי הסדר)
rcpt_to_0 = כתובת הנמען (במקרה ויש כמה אמור להיות גם rcpt_to_1 וכו')
mail_from = כתובת השולח
body = גוף ההודעה (זה מתקבל כHTML וקצת משתבש כששלוחים אותו כערך בPOST, אני לא יודע איך ממירים חזרה)
subject = כותרת ההודעה
Filename_0 = שם קובץ מצורף (בהמשך אני יראה איך אני שולח אותו בפועל)
ContentType_0 = סוג הקובץ של Filename_0 (לא קריטי פשוט זה פונקציה שהיה לי אז דחפתי)
helo = שם הדומיין ששלח את המייל
remote_ip = כתובת הIP ששלח את המייל
tls_on = האם TLS מופעל (במקרה שלנו לא, אפשר להוסיף את זה בהמשך)אם השרת SMTP מקבל את התגובה SAVED
אז הוא מחזיר את התשובה לשולח שהמייל התקבל בהצלחה .יש כאן עוד הרבה פונקציות שעדיין לא הבנתי בדיוק מה זה אומר
אז לכן לא מומלץ להשתמש בסקריפט הזה בפרודקשן.אשמח לשמוע תגובות, הצעות וכו'.
עריכה:למי שרוצה לנסות בלי לההתקין
אפשר לשלוח מייל לכל כתובת בדומיין koshercode.dev (זה לא משנה מה המשתמש כי אני מחזירPASSED
לכולם)
ובכותרת לכתוב את הכתובת HTTP שאליו אתם רוצים להפנות את כל הפלט
(לא להכניס שום דבר אחר רק את הכתובת).
ובבקשה לא להכניס כתובת שגויים כי אז השרת שלי כנראה יפול -
אני רואה שגם בתחום בSMTP יש ספאם
זה הסגנון של הלוג שקיבלתי אחרי שהשרת היה פתוח קצת זמןDEBU[53226] [0.0.0.0:25] Waiting for a new client. Next Client ID: 6 INFO[53226] Handle client [188.75.74.132] event=connect id=5 DEBU[53226] Writing response to client: 20 scw-clever-swirles SMTP Guerrilla(unknown) #5 (1) 2020-02-14T07:28:31+02:00 DEBU[53226] Client sent: ehlo SRVEDGE1 DEBU[53226] Writing response to client: 250-scw-clever-swirles Hello 250-SIZE 10485760 250-PIPELINING 250-ENHANCEDSTATUSCODES 50 HELP DEBU[53226] Client sent: Rset DEBU[53226] Writing response to client: 2.1.0 OK DEBU[53226] Client sent: Mail from:<spameri@tiscali.it> INFO[53226] Mail from address=188.75.74.132 domain=tiscali.it event=mailfrom helo=SRVEDGE1 id=5 DEBU[53226] Writing response to client: 2.1.0 OK DEBU[53226] Client sent: RCPT to:<spameri@tiscali.it> DEBU[53226] Writing response to client: 54 4.1.1 Error: Relay access denied: tiscali.it DEBU[53227] Client sent: Quit DEBU[53227] Writing response to client: 1 2.0.0 Bye INFO[53227] Disconnect client event=disconnect id=5
לא הבנתי בדיוק מה הם מנסים לעשות
הם מנסים לשלוח מייל מspameri@tiscali.it לspameri@tiscali.it
מה הם מנסים למצוא?
שרת SMTP חינמי? -