קודם סדרו את הדומיין השולח
הגדירו לדומיין SPF, DKIM ו-DMARC וחממו אותו בהדרגה. הפרוקסי מעביר את החיבור; הוא לא מתקן דומיין קר או רשימה שמעולם לא נתנה הסכמה.
רוב שירותי הפרוקסי סוגרים את פורט 25, ותוכנת הדיוור מתה בהתחברות. Advanced.name שומרת את 25, 465 ו-587 פתוחים בכל חבילה ללא הגבלה ונותנת עד 50,000 כתובות IPv4 בקישור אחד, עם הרשאה לפי ה-IP של השרת שלכם. המוניטין יושב על דומיין השליחה שלכם; הפרוקסי מעביר חיבור נקי.
המסירה תלויה במוניטין של הכתובת השולחת. מאגר גדול מפזר את המוניטין הזה בשכבות דקות.
יציאה החוצה דרך פורט 25 או פורט TLS
25, 465 ו-587 פתוחים בכל 13 החבילות ללא הגבלה, SOCKS5 ו-HTTP בפורט אחד
כתובת טרייה לכל מנה
בחבילה מס' 5 יש 40,000 IP, במס' 6 50,000; בערך שליש מתחלף כל יום
גישה בלי שם משתמש וסיסמה
אשרו בפאנל את ה-IP של השרת השולח; הכתובת היא המפתח
חיבורים לסשנים מקבילים של SMTP
3,000 חיבורים בחבילה מס' 5, 5,000 במס' 6
מאגר גדול יותר אומר פחות מיילים לכל כתובת. לדיוור יומי קחו את מס' 5 או מס' 6 במיקס עולמי.
הגדירו לדומיין SPF, DKIM ו-DMARC וחממו אותו בהדרגה. הפרוקסי מעביר את החיבור; הוא לא מתקן דומיין קר או רשימה שמעולם לא נתנה הסכמה.
הוסיפו את ה-IP של השולח בפאנל, ואז כוונו את לקוח ה-SMTP לרשימת ip:port דרך SOCKS5 או HTTP.
הריצו את סקריפט הנגישות למטה או את Socks List Processor, כדי שברשימה יישארו רק פרוקסי שמגיעים לשרת ה-SMTP שלכם ב-25, 465 או 587.
הדביקו את רשימת הפרוקסי ואת שרת הדואר. הסקריפט פותח דרך כל פרוקסי את הפורטים 25, 465 ו-587 וקורא את הברכה של השרת, כך שנשארות רק הכתובות שמגיעות אליו. הוא לא שולח כלום. אותה רשימה רצה גם ב-Socks List Processor.
#!/usr/bin/env python3
"""SMTP reachability checker for Advanced.name proxies.
A legitimate mail setup needs to know which proxies can actually reach an SMTP
server. This opens a SOCKS5 tunnel to the mail host on ports 25, 465 and 587
through each proxy and reads the greeting, so you keep only the addresses that
work. It does not send mail. Standard library only. Run: python3 smtp_reach.py
"""
# ================================ CONFIG ====================================
PROXY_LIST = "proxies.txt" # one ip:port per line, or a CSV export (';' separated)
SMTP_HOST = "smtp.gmail.com" # the mail server you plan to relay through
SMTP_PORTS = (587, 465, 25) # ports to test on that host
THREADS = 100
TIMEOUT = 12
OUT_FILE = "smtp_ok.csv" # proxy;port;banner is written here
# ============================================================================
import csv
import socket
import sys
import threading
from concurrent.futures import ThreadPoolExecutor, as_completed
def load_list(path):
out = []
with open(path, encoding="utf-8", errors="replace") as fh:
for line in fh:
line = line.strip()
if not line or line.startswith("#"):
continue
if ";" in line: # CSV row: ip;port;...
parts = line.split(";")
if len(parts) >= 2 and parts[1].isdigit():
out.append(parts[0] + ":" + parts[1])
elif ":" in line:
out.append(line)
return out
def socks5_connect(proxy, host, port):
"""Open host:port through a no-auth SOCKS5 proxy, return the connected socket."""
ip, pport = proxy.rsplit(":", 1)
sock = socket.create_connection((ip, int(pport)), TIMEOUT)
sock.settimeout(TIMEOUT)
sock.sendall(b"\x05\x01\x00")
if sock.recv(2) != b"\x05\x00":
raise ConnectionError("socks5 handshake")
host_bytes = host.encode()
sock.sendall(b"\x05\x01\x00\x03" + bytes([len(host_bytes)]) + host_bytes + port.to_bytes(2, "big"))
reply = sock.recv(4)
if len(reply) < 2 or reply[1] != 0:
raise ConnectionError("socks5 connect rejected")
sock.recv(256) # drain the bound-address tail
return sock
def reachable(proxy):
"""Return (port, banner) for the first SMTP port that answers, or (0, reason)."""
for port in SMTP_PORTS:
try:
sock = socks5_connect(proxy, SMTP_HOST, port)
except OSError:
continue
try:
if port == 465: # implicit TLS: no plaintext banner
sock.close()
return port, "connected (tls)"
banner = sock.recv(256).decode("latin-1", "replace").strip()
sock.close()
if banner.startswith("220"):
return port, banner[:80]
except OSError:
pass
return 0, "no smtp port reachable"
def main():
proxies = load_list(PROXY_LIST)
if not proxies:
sys.exit("List is empty.")
print("host %s, ports %s, proxies %d" % (SMTP_HOST, SMTP_PORTS, len(proxies)))
ok, lock = [], threading.Lock()
def work(proxy):
port, info = reachable(proxy)
if port:
with lock:
ok.append((proxy, port, info))
return proxy, port, info
with ThreadPoolExecutor(max_workers=THREADS) as pool:
for fut in as_completed([pool.submit(work, p) for p in proxies]):
proxy, port, info = fut.result()
print("%-22s %s" % (proxy, ("%d %s" % (port, info)) if port else info))
with open(OUT_FILE, "w", encoding="utf-8", newline="") as out:
writer = csv.writer(out, delimiter=";")
writer.writerow(["proxy", "port", "banner"])
writer.writerows(ok)
print("reachable: %d of %d -> %s" % (len(ok), len(proxies), OUT_FILE))
if __name__ == "__main__":
main()
המסירה נשענת על הדומיין השולח, לא על הפרוקסי. הגדירו לדומיין SPF, DKIM ו-DMARC, חממו את השולח בהדרגה ושלחו רק לרשימות שנתנו הסכמה. הפרוקסי מעביר את החיבור; הוא לא מתקן דומיין קר.
בעזרת הבודק למעלה השאירו רק פרוקסי שבאמת מגיעים לשרת ה-SMTP שלכם בפורטים 25, 465 או 587: הרבה רשתות חוסמות את 25, שלנו משאירה אותו פתוח.
רוב לקוחות ה-SMTP והסקריפטים הטרנזקציוניים מקבלים פרוקסי SOCKS5 או HTTP לכל חיבור: כתבו ip:port בשדה הפרוקסי, בחרו SOCKS5 ואשרו את ה-IP של השרת בפאנל, ואז לא צריך שם משתמש.
בדקו קודם את הרשימה בסקריפט הנגישות או ב-Socks List Processor, כדי שכתובות מתות לא יעצרו שליחה.
קמפייני SMTP לגיטימיים עוברים רק דרך חבילות ללא הגבלה: שם הפורטים 25, 465 ו-587 פתוחים.
קמפיינים יומייםההתאמה הטובה ביותר
כל כתובת נושאת פחות מכתבים, והתעבורה לא נספרת בשום נפח. הפורטים 25, 465 ו-587 פתוחים.
$1190 לחודשאו $5.00 לשעה
נפחים גדולים
המאגר הגדול ביותר. לקמפיינים שמריצים אלפי סשנים של SMTP במקביל.
$1390 לחודשאו $5.80 לשעה
Resi Core ו-Resi Prime לא מתאימים לדיוור: פורט 25 סגור בהם, והכללים אוסרים ספאם.
בחרו חבילה, קחו את שעת הניסיון החינמית, בדקו את הרשימה והתחילו.