සම්බන්ධතා ක්‍රම දෙකම එකම පණිවිඩය එකම රිලේ ගිණුමට ගෙන යයි, වෙනස වන්නේ TLS ආරම්භ වන තැනය, යවන දෙය නොවේ. එකක් පැහැදිලි පෙළකින් විවෘත වී සම්බන්ධතාව තුළම උත්ශ්‍රේණි වේ; අනෙක පළමු බයිටයේ සිටම සංකේතනය වී ඇත. එම එකම වෙනස තීරණය කරන්නේ දැඩි රිලේ ප්‍රතිපත්තියක් කුමක් පිළිගනීද, අතරමැදි උපාංගයකට කුමක් නිරීක්ෂණය කළ හැකිද, සහ කුමන දෝෂ පණිවිඩයක් ඔබ දිවා අඩක් කියවමින් සිටීද යන්නය. පෞද්ගලික ජාලයක යෙදුමක් අභ්‍යන්තර යැවීම් සේවාවකට පණිවිඩයක් භාර දෙන විට මා මේ දෙක අතර තෝරා ගන්නා ආකාරය මෙයයි.

ක්‍රම දෙක ඇත්තටම කොතැනින් වෙන් වේද

දෙකම අවස්ථාවල කාර්යය සමානය: අනුමත ගිණුමක් ලෙස සත්‍යාපනය කරන්න, අවසර ලත් යවන්නෙකු නම් කරන්න, ලබන්නන් ලැයිස්තුගත කරන්න, සහ රිලේ වගකීම භාර ගන්නා තෙක් රැඳී සිටින්න. වෙනස් වන්නේ ක්‍රියාවලියේ අනුපිළිවෙලය. 587 වරාය පැහැදිලි පෙළ SMTP සැසියක් ලෙස ආරම්භ වේ, EHLO පිළිතුරේ STARTTLS ප්‍රකාශ කරයි, සහ සේවාලාභියා ඉල්ලා සිටින විට පමණක් උත්ශ්‍රේණි වේ. 465 වරාය ඕනෑම SMTP විධානයක් කීමට පෙර TLS හස්තස්පර්ශයක් අපේක්ෂා කරයි.

යැවීම සහ රිලේ වෙනස් කාර්යයන්, එබැවින් වරාය අංක මාරු කළ හැකි පුරුදු නොවේ. RFC 6409 පණිවිඩ යැවීම වෙනම සේවාවක් ලෙස විස්තර කරයි, සහ RFC 8314 බොහෝ නවීන රිලේ 465 හි ලබා දෙන ව්‍යංග්‍ය-TLS ප්‍රභේදය ආවරණය කරයි. ඔබේ රිලේ දෙකෙන් එකක් ලේඛනගත කරන්නේ නම්, එම ලේඛනය පෙර සේවායෝජිතයෙකුගෙන් ලැබූ ඕනෑම මනාපයකට වඩා ඉහළින් තිබේ.

587 හි STARTTLS ඔබට දෙන දේ

උත්ශ්‍රේණි කිරීම SMTP සංවාදය තුළම සිදු වේ, එබැවින් රිලේ එය ප්‍රකාශ කළ හැකි අතර සේවාලාභියාට එය නොමැතිව ඉදිරියට යාම ප්‍රතික්ෂේප කළ හැක. Python හි, සේවාදායකය එම දිගුව ලබා නොදෙන විට starttls() ව්‍යතිරේකයක් විසි කරයි, එය පහත හෙළීමේ උත්සාහයක් නිහඬ පැහැදිලි-පෙළ පිවිසීමක් වෙනුවට දෘශ්‍ය අසාර්ථකත්වයක් බවට පත් කරයි. එම හැසිරීම මෙම ක්‍රමයේ ප්‍රධාන තර්කයයි, සහ අහම්බයෙන් නොව අරමුණු කරගෙන එය මත රැඳී සිටීම වටී.

නිරාවරණ කවුළුව කුඩා නමුත් සැබෑය: ආරම්භක EHLO හුවමාරුව කියවිය හැකි අතර, උත්ශ්‍රේණියට පෙර කිසිවක් ප්‍රතිපත්ති දරන්නේ නැත. යෙදුම් උපජාලය සහ අභ්‍යන්තර රිලේ අතර පෞද්ගලික මාර්ගයක එම කවුළුව සාමාන්‍යයෙන් පිළිගත හැකිය. ඔබ පාලනය නොකරන මාර්ගයක, සමහර කණ්ඩායම් අනෙක් ක්‍රමය ඉල්ලා සිටීමට හේතුව එයයි.

STARTTLS හැකියාව ඉවත් කරන බාධක උපාංගයක් අසාර්ථක යැවීමක් නිපදවයි, පසුබැසීමක් නොවේ. එය ඔබට අවශ්‍ය ප්‍රතිඵලයයි, සහ මාර්ගයේ යමක් SMTP නැවත ලියන බව සොයා ගැනීමේ වේගවත්ම ක්‍රමයද එයයි.

465 හි ව්‍යංග්‍ය TLS වෙනස් කරන දේ

පැහැදිලි පෙළ අවස්ථාවක් කිසිසේත් නැත. සොකට් විවෘත වූ වහාම සේවාලාභියා TLS හස්තස්පර්ශයක් සිදු කරයි, සිය විශ්වාස ගබඩාවට එරෙහිව සහතිකය සත්‍යාපනය කරයි, සහ ඉන් පසුව පමණක් EHLO, AUTH සහ පණිවිඩය හුවමාරු කරයි. සැසිය පහත හෙළීමට කිසිවකට නොහැකි වන්නේ සාකච්ඡා කිරීමට පැහැදිලි පෙළ තත්වයක් නොමැති බැවිනි, සහ එය බාධක අසාර්ථකත්වයන්ගේ මුළු පන්තියක් ඉවත් කරයි.

මෙම හුවමාරුව රෝග විනිශ්චය හැකියාවයි. 465 හි පැහැදිලි පෙළ SMTP සමඟ පිළිතුරු දෙන රිලේ, හෝ වැරදි සහතික නාමයක් සමඟ TLS අවසන් කරන භාර බෙදුම්කරුවෙක්, හස්තස්පර්ශයේදී අසාර්ථක වී තැපැල් දෝෂයක් වෙනුවට ඔබට SSL දෝෂයක් දෙයි. එය සිදු වූ විට, ගැටලුව යෙදුමට යටින් පවතී, සහ කොපමණ පණිවිඩ ගොඩනැගීමක් වුවද එය නිවැරදි නොකරයි.

එක් යැවීම් ශ්‍රිතයක්, ප්‍රවාහන දෙකක්

කේතය ක්‍රම දෙක අතර බොහෝ දුරට වෙනස් නොවේ, එබැවින් තේරීම පුස්තකාලයේ පහසුවෙන් නොව රිලේ ප්‍රතිපත්තියෙන් සිදු කළ යුතුය. පළමුව සැකසුම් අපනයනය කරන්න, පසුව වින්‍යාසගත වරායෙන් ප්‍රවාහනය තෝරන තනි ස්ක්‍රිප්ටයක් ධාවනය කරන්න.

export SMTP_HOST=smtp.relay.internal
export SMTP_PORT=587
export SMTP_USER=svc-notify
export [email protected]
export [email protected]
export SMTP_PASSWORD="$(cat /run/secrets/smtp_password)"
import os, smtplib, ssl
from email.message import EmailMessage

ctx = ssl.create_default_context()
msg = EmailMessage()
msg["From"] = os.environ["MAIL_FROM"]
msg["To"] = os.environ["MAIL_TEST_TO"]
msg["Subject"] = "relay submission test"
msg.set_content("One authorized test message from the app.")

host = os.environ["SMTP_HOST"]
port = int(os.environ.get("SMTP_PORT", "587"))

if port == 465:
    client = smtplib.SMTP_SSL(host, port, context=ctx, timeout=15)
else:
    client = smtplib.SMTP(host, port, timeout=15)
    client.ehlo()
    client.starttls(context=ctx)
    client.ehlo()

with client:
    client.login(os.environ["SMTP_USER"], os.environ["SMTP_PASSWORD"])
    refused = client.send_message(msg)

print("refused:", refused)

create_default_context() දාමය සහ සත්කාරක නාමය සත්‍යාපනය කරයි, එබැවින් පෞද්ගලික CA විශ්වාස ගබඩාවේ ස්ථාපනය කළ යුතුය, සත්‍යාපනය නොකළ සන්දර්භයකින් මග හැරිය යුතු නොවේ. send_message() රිලේ ප්‍රතික්ෂේප කළ ලබන්නන්ගේ ශබ්දකෝෂයක් ලබා දෙයි; හිස් ශබ්දකෝෂය යනු එය සියල්ලන්ම පිළිගත් බවයි. පහළොස් තත්පර කාල සීමාව ආරම්භක ලක්ෂ්‍යයකි, ඔබේ ජාලය සඳහා සකසන ලද අගයක් නොවේ.

මුරපදය රූපයෙන් සහ ලොග්වලින් පිටත තබන්න. ධාවන කාලයේ සවි කර පරිසරයට කියවන රහසක් හොඳය; පරිසරය ලොග් පේළියකට ප්‍රතිරාවය කිරීම හොඳ නැත, AUTH හුවමාරුවේ නිදොස්කරණ සලකුණද එසේමය.

පුරුද්දෙන් නොව රිලේ ප්‍රතිපත්තියෙන් සහ මාර්ගයෙන් තෝරන්න

කොන්දේසි තුනක් මෙය තීරණය කරයි. පළමුව, රිලේ ඇත්තටම ප්‍රකාශ කරන දේ: 587 හි STARTTLS සමඟ පමණක් සවන් දෙන සේවාවක් 465 හි ළඟා කරගත නොහැක, ඔබ කොපමණ ව්‍යංග්‍ය TLS කැමති වුවද. දෙවනුව, යෙදුම සහ රිලේ අතර මාර්ගය කියවිය හැකි EHLO හුවමාරුවක් පිළිගැනීමට තරම් විශ්වාසදායකද යන්න. තෙවනුව, මැද යමක් SMTP නැවත ලියන්නේද හෝ නියෝජිත කරන්නේද යන්න, එය පහත හෙළීමේ අවදානම සෛද්ධාන්තිකද සැබෑද යන්න තීරණය කරන බැවිනි.

රිලේ දෙකම ලබා දෙන විට, අධීක්ෂණයකින් තොරව ධාවනය වන සේවාවකට මා 465 ගනිමි, පළමු යෙදවීම මිනිසෙකු නරඹන සේවාවකට 587 ගනිමි, අසාර්ථක පණිවිඩ විවිධ ස්තර වෙත යොමු වන නිසා පමණි. එම මනාපය මගේය, එය ප්‍රතිපත්තියක් නොවේ.

ඔබ තෝරන කුමක් වුවද, වරාය, විශ්වාස ද්‍රව්‍යය සහ යවන්නාගේ වසම යෙදවීම සමඟ සටහන් කරන්න. ඉන්පසු එක් අවසර ලත් පරීක්ෂණ පණිවිඩයක් යවා රිලේ එය පිළිගත් බව තහවුරු කරන්න, යැවීම් ප්‍රතිඵලය සහ පසුව එන ඕනෑම බෙදාහැරීම් වාර්තාවක් වෙන වෙනම වාර්තා ලෙස තබා ගන්න. රිලේට සාර්ථක භාරදීම යෙදුමේ වගකීම අවසන් වීමයි, පණිවිඩය එන ලිපිට ලඟා වූ බවට සාක්ෂියක් නොවේ.

අදාළ ලිපි