{"id":43304,"date":"2026-07-13T21:04:13","date_gmt":"2026-07-13T18:04:13","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/"},"modified":"2026-07-13T21:04:41","modified_gmt":"2026-07-13T18:04:41","slug":"python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/","title":{"rendered":"Python ile K\u00fct\u00fcphanesiz E-posta G\u00f6nderme: SMTP&#8217;nin G\u00fcc\u00fc"},"content":{"rendered":"<h2>Python ile K\u00fct\u00fcphanesiz E-posta G\u00f6nderme: SMTP&#8217;nin G\u00fcc\u00fc<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda e-posta, ki\u015fisel ileti\u015fimden kurumsal otomasyona kadar her alanda vazge\u00e7ilmez bir ara\u00e7. Bir\u00e7o\u011fumuz Python ile e-posta g\u00f6ndermek istedi\u011fimizde hemen akla <code>yagmail<\/code> gibi pratik k\u00fct\u00fcphaneler gelir. Ancak, bu t\u00fcr harici ba\u011f\u0131ml\u0131l\u0131klar bazen gereksiz olabilir veya projenin genel yap\u0131s\u0131na uymayabilir. Peki ya size, Python&#8217;\u0131n kendi b\u00fcnyesinde bar\u0131nd\u0131rd\u0131\u011f\u0131 g\u00fc\u00e7l\u00fc mod\u00fcllerle, hi\u00e7bir harici k\u00fct\u00fcphaneye ihtiya\u00e7 duymadan, e-posta g\u00f6nderme i\u015flemini &#8220;birinci s\u0131n\u0131f vatanda\u015f&#8221; gibi ger\u00e7ekle\u015ftirebilece\u011finizi s\u00f6ylesem? Bu makalede, <code>smtplib<\/code> ve <code>email<\/code> mod\u00fcllerinin derinliklerine inerek, esnek, g\u00fcvenli ve tamamen kontrol\u00fcn\u00fcz alt\u0131nda e-posta g\u00f6nderme y\u00f6ntemlerini ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Bu y\u00f6ntem, \u00f6zellikle sunucu taraf\u0131nda ek ba\u011f\u0131ml\u0131l\u0131klar y\u00fcklemek istemeyen, g\u00fcvenlik gereksinimleri y\u00fcksek veya performansa odaklanan uygulamalar i\u00e7in idealdir. Amac\u0131m\u0131z, okuyucuyu s\u0131f\u0131rdan al\u0131p, karma\u015f\u0131k e-posta senaryolar\u0131n\u0131 bile kolayca y\u00f6netebilecek bir yetkinli\u011fe ula\u015ft\u0131rmakt\u0131r. Hadi gelin, Python&#8217;\u0131n yerle\u015fik g\u00fcc\u00fcn\u00fc kullanarak e-posta g\u00f6ndermenin inceliklerini birlikte \u00f6\u011frenelim.<\/p>\n<h3>Neden Harici K\u00fct\u00fcphanelerden Ka\u00e7\u0131nmal\u0131y\u0131z? Yerle\u015fik Mod\u00fcllerin Avantajlar\u0131 Nelerdir?<\/h3>\n<p>Bir yaz\u0131l\u0131m projesinde yeni bir \u00f6zellik eklerken, \u00e7o\u011fu zaman ilk akl\u0131m\u0131za gelen \u015fey, bu i\u015fi yapan haz\u0131r bir k\u00fct\u00fcphane olup olmad\u0131\u011f\u0131n\u0131 kontrol etmektir. E-posta g\u00f6nderme s\u00f6z konusu oldu\u011funda da <code>yagmail<\/code>, <code>django-sendgrid<\/code> gibi bir\u00e7ok pop\u00fcler k\u00fct\u00fcphane mevcuttur. Bu k\u00fct\u00fcphaneler, geli\u015ftirme s\u00fcrecini h\u0131zland\u0131rabilir ve karma\u015f\u0131k detaylar\u0131 soyutlayarak i\u015fimizi kolayla\u015ft\u0131rabilir. Ancak, her madalyonun iki y\u00fcz\u00fc oldu\u011fu gibi, harici k\u00fct\u00fcphanelerin kullan\u0131m\u0131 da beraberinde baz\u0131 dezavantajlar\u0131 getirebilir. \u00d6zellikle k\u00fc\u00e7\u00fck veya orta \u00f6l\u00e7ekli projelerde, yaln\u0131zca birka\u00e7 e-posta g\u00f6nderme i\u015flemi i\u00e7in devasa bir k\u00fct\u00fcphane y\u00fcklemek, projenin ba\u011f\u0131ml\u0131l\u0131k a\u011fac\u0131n\u0131 gereksiz yere \u015fi\u015firebilir. Bu durum, uygulaman\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 zorla\u015ft\u0131rabilir, potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131na davetiye \u00e7\u0131karabilir ve gelecekteki bak\u0131m maliyetlerini art\u0131rabilir.<\/p>\n<p>\u00d6te yandan, Python&#8217;\u0131n standart k\u00fct\u00fcphanesinde yer alan <code>smtplib<\/code> ve <code>email<\/code> mod\u00fclleri, e-posta g\u00f6nderme i\u015fleminin t\u00fcm temel ve ileri d\u00fczey ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131layabilecek kapasitededir. Bu mod\u00fcller, Python ile birlikte gelir, yani herhangi bir ek kurulum veya ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimi gerektirmezler. Bu durum, uygulaman\u0131z\u0131n daha hafif, daha g\u00fcvenli ve daha tutarl\u0131 olmas\u0131n\u0131 sa\u011flar. G\u00fcvenlik a\u00e7\u0131s\u0131ndan bak\u0131ld\u0131\u011f\u0131nda, harici k\u00fct\u00fcphaneler \u00fc\u00e7\u00fcnc\u00fc taraf geli\u015ftiricilerin kontrol\u00fcndedir ve potansiyel olarak k\u00f6t\u00fc niyetli kod i\u00e7erebilir veya g\u00fcncel olmayan g\u00fcvenlik protokollerini kullanabilirler. Standart k\u00fct\u00fcphane mod\u00fclleri ise Python \u00e7ekirdek ekibi taraf\u0131ndan s\u00fcrekli olarak denetlenir ve g\u00fcncellenir, bu da daha y\u00fcksek bir g\u00fcvenilirlik seviyesi sunar. Ayr\u0131ca, bu mod\u00fclleri kullanarak, e-posta olu\u015fturma ve g\u00f6nderme s\u00fcrecinin her a\u015famas\u0131 \u00fczerinde tam kontrol sahibi olursunuz. Bu kontrol, \u00f6zel ba\u015fl\u0131klar eklemekten, karma\u015f\u0131k MIME (Multipurpose Internet Mail Extensions) yap\u0131lar\u0131 olu\u015fturmaya kadar geni\u015f bir yelpazeyi kapsar. \u00d6rne\u011fin, bir pazarlama kampanyas\u0131 i\u00e7in ki\u015fiselle\u015ftirilmi\u015f e-postalar g\u00f6ndermeniz gerekti\u011finde veya belirli bir e-posta sa\u011flay\u0131c\u0131s\u0131n\u0131n \u00f6zel gereksinimlerini kar\u015f\u0131laman\u0131z gerekti\u011finde, standart k\u00fct\u00fcphaneler size bu esnekli\u011fi sunar. K\u0131sacas\u0131, harici k\u00fct\u00fcphanelerin getirdi\u011fi kolayl\u0131k cazip olsa da, Python&#8217;\u0131n yerle\u015fik yeteneklerini kullanmak, uzun vadede daha sa\u011flam, daha g\u00fcvenli ve daha y\u00f6netilebilir \u00e7\u00f6z\u00fcmler \u00fcretmenizi sa\u011flar. Bu yakla\u015f\u0131m, yaz\u0131l\u0131m geli\u015ftirme prensiplerinden biri olan &#8220;az ba\u011f\u0131ml\u0131l\u0131k, \u00e7ok kontrol&#8221; ilkesine de m\u00fckemmel bir \u015fekilde uyar.<\/p>\n<h3>SMTP Nedir ve E-posta Nas\u0131l \u00c7al\u0131\u015f\u0131r? Temel Kavramlar<\/h3>\n<p>E-posta g\u00f6nderme s\u00fcrecini anlaman\u0131n ilk ad\u0131m\u0131, Simple Mail Transfer Protocol (Basit Posta Aktar\u0131m Protokol\u00fc) veya k\u0131saca SMTP&#8217;yi kavramakt\u0131r. SMTP, e-posta sunucular\u0131 aras\u0131nda e-posta iletmek i\u00e7in kullan\u0131lan bir TCP\/IP protokol\u00fcd\u00fcr. Bir e-posta g\u00f6nderdi\u011finizde, bu e-posta asl\u0131nda do\u011frudan al\u0131c\u0131n\u0131n posta kutusuna gitmez; bunun yerine, sizin e-posta istemciniz (\u00f6rne\u011fin Outlook, Gmail aray\u00fcz\u00fc veya bizim durumumuzda Python beti\u011fi), e-postay\u0131 bir SMTP sunucusuna (giden posta sunucusu) g\u00f6nderir. Bu SMTP sunucusu, e-postay\u0131 al\u0131c\u0131n\u0131n e-posta adresine kar\u015f\u0131l\u0131k gelen ba\u015fka bir SMTP sunucusuna iletir. Son olarak, al\u0131c\u0131n\u0131n posta sunucusu, e-postay\u0131 al\u0131c\u0131n\u0131n posta kutusuna teslim eder ve al\u0131c\u0131, bir POP3 (Post Office Protocol 3) veya IMAP (Internet Message Access Protocol) istemcisi kullanarak e-postay\u0131 al\u0131r.<\/p>\n<p>E-posta g\u00f6nderim s\u00fcrecinde birka\u00e7 temel bile\u015fen devreye girer:<\/p>\n<ul>\n<li><strong>E-posta \u0130stemcisi (Mail User Agent &#8211; MUA):<\/strong> Kullan\u0131c\u0131n\u0131n e-posta okumak ve g\u00f6ndermek i\u00e7in kulland\u0131\u011f\u0131 yaz\u0131l\u0131m (Python beti\u011fimiz bu rol\u00fc \u00fcstlenecek).<\/li>\n<li><strong>Posta G\u00f6nderme Arac\u0131s\u0131 (Mail Submission Agent &#8211; MSA):<\/strong> E-posta istemcisinden e-postay\u0131 alan ve onu Posta Aktar\u0131m Arac\u0131s\u0131na (MTA) ileten sunucu. Genellikle bir SMTP sunucusu olarak \u00e7al\u0131\u015f\u0131r.<\/li>\n<li><strong>Posta Aktar\u0131m Arac\u0131s\u0131 (Mail Transfer Agent &#8211; MTA):<\/strong> E-postalar\u0131 bir sunucudan di\u011ferine ileten sunucu. Bir SMTP sunucusu MTA rol\u00fcn\u00fc \u00fcstlenir.<\/li>\n<li><strong>Posta Teslim Arac\u0131s\u0131 (Mail Delivery Agent &#8211; MDA):<\/strong> E-postay\u0131 al\u0131c\u0131n\u0131n posta kutusuna teslim eden sunucu.<\/li>\n<\/ul>\n<p>E-postalar\u0131n i\u00e7eri\u011fi ve yap\u0131s\u0131 da olduk\u00e7a \u00f6nemlidir. E-postalar sadece d\u00fcz metinden ibaret de\u011fildir; genellikle HTML i\u00e7eri\u011fi, ekler ve \u00e7e\u015fitli meta veriler i\u00e7erirler. \u0130\u015fte burada MIME (Multipurpose Internet Mail Extensions) devreye girer. MIME, e-postalar\u0131n d\u00fcz metin d\u0131\u015f\u0131nda farkl\u0131 veri t\u00fcrlerini (\u00f6rne\u011fin, resimler, ses dosyalar\u0131, PDF&#8217;ler, HTML sayfalar\u0131) ta\u015f\u0131mas\u0131n\u0131 sa\u011flayan bir standartt\u0131r. Python&#8217;\u0131n <code>email<\/code> mod\u00fcl\u00fc, bu MIME yap\u0131s\u0131n\u0131 kolayca olu\u015fturmam\u0131za olanak tan\u0131r. Bir MIME mesaj\u0131, temelde bir hiyerar\u015fik yap\u0131d\u0131r ve her b\u00f6l\u00fcm, farkl\u0131 bir i\u00e7erik t\u00fcr\u00fcn\u00fc temsil eder. \u00d6rne\u011fin, bir e-posta hem d\u00fcz metin hem de HTML i\u00e7eri\u011fi i\u00e7eriyorsa, bu iki i\u00e7erik MIME&#8217;nin farkl\u0131 b\u00f6l\u00fcmleri olarak temsil edilir. Bu sayede, al\u0131c\u0131n\u0131n e-posta istemcisi, destekledi\u011fi en iyi format\u0131 (\u00f6rne\u011fin HTML) g\u00f6r\u00fcnt\u00fcleyebilir ve desteklemiyorsa (\u00f6rne\u011fin eski bir istemci), d\u00fcz metin s\u00fcr\u00fcm\u00fcn\u00fc g\u00f6sterebilir. Bu esneklik, modern e-posta ileti\u015fiminin temelini olu\u015fturur ve Python&#8217;\u0131n <code>email<\/code> mod\u00fcl\u00fc ile bu karma\u015f\u0131k yap\u0131lar\u0131 olu\u015fturmak olduk\u00e7a basittir.<\/p>\n<p>G\u00fcvenlik de e-posta g\u00f6nderiminde kritik bir fakt\u00f6rd\u00fcr. SMTP sunucular\u0131 genellikle kullan\u0131c\u0131 ad\u0131 ve \u015fifre ile kimlik do\u011frulamas\u0131 gerektirir. Ayr\u0131ca, e-posta i\u00e7eri\u011finin a\u011f \u00fczerinde \u015fifrelenmeden g\u00f6nderilmesi ciddi g\u00fcvenlik riskleri ta\u015f\u0131r. Bu nedenle, Transport Layer Security (TLS) veya Secure Sockets Layer (SSL) gibi \u015fifreleme protokolleri kullan\u0131l\u0131r. Python&#8217;\u0131n <code>smtplib<\/code> mod\u00fcl\u00fc, bu g\u00fcvenlik protokollerini destekleyerek e-posta ileti\u015fiminizin g\u00fcvenli bir \u015fekilde ger\u00e7ekle\u015fmesini sa\u011flar. Genellikle, <code>starttls()<\/code> metodu kullan\u0131larak mevcut bir ba\u011flant\u0131 TLS \u015fifrelemesi ile y\u00fckseltilir veya do\u011frudan SSL ba\u011flant\u0131s\u0131 kurmak i\u00e7in belirli bir port (genellikle 465) \u00fczerinden ba\u011flant\u0131 kurulur. Bu temel kavramlar\u0131 anlamak, Python ile e-posta g\u00f6nderme s\u00fcrecini sadece kod yazmaktan \u00f6teye ta\u015f\u0131yacak, olas\u0131 sorunlar\u0131 te\u015fhis etmenize ve daha g\u00fcvenli, daha sa\u011flam \u00e7\u00f6z\u00fcmler geli\u015ftirmenize yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>Ad\u0131m Ad\u0131m E-posta G\u00f6nderme: Python&#8217;\u0131n smtplib ve email Mod\u00fclleriyle Tan\u0131\u015fma<\/h3>\n<p>Python&#8217;\u0131n yerle\u015fik <code>smtplib<\/code> ve <code>email<\/code> mod\u00fclleri, e-posta g\u00f6nderme i\u015flemini ba\u015ftan sona y\u00f6netmenizi sa\u011flar. Bu b\u00f6l\u00fcmde, basit bir metin e-postas\u0131ndan ba\u015flayarak, HTML i\u00e7erikli ve ekli e-postalar\u0131n nas\u0131l g\u00f6nderilece\u011fini ad\u0131m ad\u0131m inceleyece\u011fiz. \u0130lk olarak, <code>smtplib<\/code> mod\u00fcl\u00fc, SMTP sunucusuyla ileti\u015fim kurmak i\u00e7in kullan\u0131l\u0131rken, <code>email<\/code> mod\u00fcl\u00fc ise e-posta mesajlar\u0131n\u0131n (ba\u015fl\u0131klar, g\u00f6vde, ekler) yap\u0131land\u0131r\u0131lmas\u0131nda bize yard\u0131mc\u0131 olur.<\/p>\n<h4>1. Basit Bir Metin E-postas\u0131 Nas\u0131l G\u00f6nderilir?<\/h4>\n<p>En temel senaryo, sadece d\u00fcz metin i\u00e7eren bir e-posta g\u00f6ndermektir. Bunun i\u00e7in <code>smtplib.SMTP_SSL<\/code> veya <code>smtplib.SMTP<\/code> ve <code>starttls()<\/code> metodunu kullanaca\u011f\u0131z. G\u00fcvenlik nedeniyle, genellikle SSL\/TLS \u015fifrelemesi \u00f6nerilir. A\u015fa\u011f\u0131daki \u00f6rnek, Gmail SMTP sunucusunu kullanarak basit bir e-posta g\u00f6ndermeyi g\u00f6stermektedir:<\/p>\n<div class=\"code-container\">\n<pre><code>\nimport smtplib\nfrom email.mime.text import MIMEText\nfrom email.header import Header\nfrom email.utils import formataddr\n\n# E-posta yap\u0131land\u0131rma bilgileri\nGONDEREN_ADRES = \"gonderen@example.com\"  # Kendi e-posta adresinizi girin\nGONDEREN_SIFRE = \"uygulama_sifreniz\"    # E-posta sa\u011flay\u0131c\u0131n\u0131zdan al\u0131nan uygulama \u015fifresi\nALICI_ADRES = \"alici@example.com\"      # Al\u0131c\u0131n\u0131n e-posta adresi\nSMTP_SUNUCU = \"smtp.gmail.com\"\nSMTP_PORT = 587 # TLS i\u00e7in genellikle 587, SSL i\u00e7in 465\n\ndef basit_metin_eposta_gonder():\n    try:\n        # Mesaj\u0131 olu\u015ftur\n        mesaj = MIMEText(\"Merhaba, bu Python ile g\u00f6nderilen basit bir metin e-postas\u0131d\u0131r.\", \"plain\", \"utf-8\")\n        mesaj[\"From\"] = formataddr((str(Header(\"G\u00f6nderen Ad\u0131\", \"utf-8\")), GONDEREN_ADRES))\n        mesaj[\"To\"] = ALICI_ADRES\n        mesaj[\"Subject\"] = Header(\"Python ile Basit E-posta Denemesi\", \"utf-8\")\n\n        # SMTP sunucusuna ba\u011flan\n        with smtplib.SMTP(SMTP_SUNUCU, SMTP_PORT) as server:\n            server.starttls()  # TLS \u015fifrelemesini ba\u015flat\n            server.login(GONDEREN_ADRES, GONDEREN_SIFRE) # Kimlik do\u011frulamas\u0131 yap\n            server.send_message(mesaj) # E-postay\u0131 g\u00f6nder\n            print(\"E-posta ba\u015far\u0131yla g\u00f6nderildi!\")\n\n    except Exception as e:\n        print(f\"E-posta g\u00f6nderilirken bir hata olu\u015ftu: {e}\")\n\n# Fonksiyonu \u00e7a\u011f\u0131r\n# basit_metin_eposta_gonder()\n  <\/code><\/pre>\n<\/div>\n<p>Bu kod blo\u011funda dikkat etmemiz gereken birka\u00e7 nokta var:<\/p>\n<ul>\n<li><code>MIMEText<\/code> s\u0131n\u0131f\u0131, e-postan\u0131n i\u00e7eri\u011fini ve t\u00fcr\u00fcn\u00fc (<code>plain<\/code> veya <code>html<\/code>) belirlemek i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><code>Header<\/code> s\u0131n\u0131f\u0131, T\u00fcrk\u00e7e karakter i\u00e7eren ba\u015fl\u0131klar\u0131 (Subject, From) do\u011fru bir \u015fekilde kodlamak i\u00e7in gereklidir.<\/li>\n<li><code>formataddr<\/code>, &#8220;G\u00f6nderen Ad\u0131 <gonderen@example.com>&#8221; format\u0131nda bir g\u00f6nderen bilgisi olu\u015fturur.<\/li>\n<li><code>smtplib.SMTP(SMTP_SUNUCU, SMTP_PORT)<\/code> ile SMTP sunucusuna ba\u011flan\u0131r\u0131z.<\/li>\n<li><code>server.starttls()<\/code>, ba\u011flant\u0131y\u0131 g\u00fcvenli hale getirir. Bu ad\u0131m, genellikle 587 numaral\u0131 port kullan\u0131l\u0131rken gereklidir. E\u011fer 465 numaral\u0131 portu kullan\u0131yorsan\u0131z, do\u011frudan <code>smtplib.SMTP_SSL<\/code> kullanabilirsiniz.<\/li>\n<li><code>server.login()<\/code> ile sunucuda kimlik do\u011frulamas\u0131 yapar\u0131z. <strong>\u00d6NEML\u0130:<\/strong> Gmail gibi sa\u011flay\u0131c\u0131lar i\u00e7in genellikle uygulama \u015fifresi (app password) kullanman\u0131z gerekir, do\u011frudan hesap \u015fifrenizle \u00e7al\u0131\u015fmayabilir.<\/li>\n<li><code>server.send_message(mesaj)<\/code>, haz\u0131rlad\u0131\u011f\u0131m\u0131z MIME mesaj\u0131n\u0131 g\u00f6nderir.<\/li>\n<\/ul>\n<h4>2. HTML \u0130\u00e7erikli E-posta Nas\u0131l G\u00f6nderilir?<\/h4>\n<p>Modern e-postalar genellikle HTML format\u0131ndad\u0131r, bu da daha zengin i\u00e7erik (kal\u0131n metin, resimler, tablolar vb.) sunmam\u0131z\u0131 sa\u011flar. HTML i\u00e7erikli bir e-posta g\u00f6ndermek i\u00e7in <code>MIMEText<\/code> s\u0131n\u0131f\u0131n\u0131 yine kullan\u0131r\u0131z, ancak <code>_subtype<\/code> parametresini <code>html<\/code> olarak ayarlar\u0131z:<\/p>\n<div class=\"code-container\">\n<\/div>\n<p>Burada tek fark, <code>MIMEText<\/code>&#8216;e verdi\u011fimiz ikinci parametrenin <code>\"html\"<\/code> olmas\u0131 ve i\u00e7eri\u011fin HTML etiketleri i\u00e7ermesidir. E-posta istemcisi bu i\u00e7eri\u011fi bir web sayfas\u0131 gibi render edecektir. Bu y\u00f6ntem, b\u00fcltenler, bildirimler veya g\u00f6rsel olarak zengin e-postalar g\u00f6ndermek i\u00e7in idealdir.<\/p>\n<h4>3. E-posta Ekleri Nas\u0131l Eklenir?<\/h4>\n<p>E-postalara dosya eklemek, <code>email.mime.multipart.MIMEMultipart<\/code> ve <code>email.mime.base.MIMEBase<\/code> (veya daha spesifik olarak <code>email.mime.application.MIMEApplication<\/code> gibi alt s\u0131n\u0131flar\u0131) kullan\u0131larak yap\u0131l\u0131r. <code>MIMEMultipart<\/code>, farkl\u0131 t\u00fcrdeki (metin, HTML, ekler) par\u00e7alar\u0131 bir araya getiren bir kapsay\u0131c\u0131d\u0131r.<\/p>\n<div class=\"code-container\">\n<pre><code>\nimport smtplib\nfrom email.mime.text import MIMEText\nfrom email.mime.multipart import MIMEMultipart\nfrom email.mime.base import MIMEBase\nfrom email import encoders\nfrom email.header import Header\nfrom email.utils import formataddr\nimport os # Dosya i\u015flemleri i\u00e7in\n\n# E-posta yap\u0131land\u0131rma bilgileri (\u00f6ncekiyle ayn\u0131)\nGONDEREN_ADRES = \"gonderen@example.com\"\nGONDEREN_SIFRE = \"uygulama_sifreniz\"\nALICI_ADRES = \"alici@example.com\"\nSMTP_SUNUCU = \"smtp.gmail.com\"\nSMTP_PORT = 587\n\ndef ekli_eposta_gonder(dosya_yolu):\n    try:\n        # Mesaj\u0131n ana kapsay\u0131c\u0131s\u0131n\u0131 olu\u015ftur\n        mesaj = MIMEMultipart()\n        mesaj[\"From\"] = formataddr((str(Header(\"Ekli E-posta G\u00f6nderen\", \"utf-8\")), GONDEREN_ADRES))\n        mesaj[\"To\"] = ALICI_ADRES\n        mesaj[\"Subject\"] = Header(\"Python ile Ekli E-posta Denemesi\", \"utf-8\")\n\n        # E-posta g\u00f6vdesini (metin veya HTML) ekle\n        body = \"Merhaba, bu e-postada bir dosya eki bulunmaktad\u0131r. L\u00fctfen kontrol edin.\"\n        mesaj.attach(MIMEText(body, \"plain\", \"utf-8\"))\n\n        # Eki ekle\n        with open(dosya_yolu, \"rb\") as attachment:\n            # MIMEBase'i kullanarak dosyay\u0131 olu\u015ftur\n            part = MIMEBase(\"application\", \"octet-stream\")\n            part.set_payload(attachment.read())\n        \n        # Base64 kodlamas\u0131 yap\n        encoders.encode_base64(part)\n\n        # Ba\u015fl\u0131klar\u0131 ekle\n        part.add_header(\n            \"Content-Disposition\",\n            f\"attachment; filename= {os.path.basename(dosya_yolu)}\",\n        )\n\n        # Mesaja eki ekle\n        mesaj.attach(part)\n\n        with smtplib.SMTP(SMTP_SUNUCU, SMTP_PORT) as server:\n            server.starttls()\n            server.login(GONDEREN_ADRES, GONDEREN_SIFRE)\n            server.send_message(mesaj)\n            print(\"Ekli e-posta ba\u015far\u0131yla g\u00f6nderildi!\")\n\n    except FileNotFoundError:\n        print(f\"Hata: '{dosya_yolu}' dosyas\u0131 bulunamad\u0131.\")\n    except Exception as e:\n        print(f\"Ekli e-posta g\u00f6nderilirken bir hata olu\u015ftu: {e}\")\n\n# \u00d6rnek bir dosya olu\u015ftur (ger\u00e7ek bir dosya kullan\u0131n)\n# with open(\"ornek_dosya.txt\", \"w\") as f:\n#     f.write(\"Bu, e-posta ekindeki \u00f6rnek bir metin dosyas\u0131d\u0131r.\")\n\n# Fonksiyonu \u00e7a\u011f\u0131r\n# ekli_eposta_gonder(\"ornek_dosya.txt\")\n  <\/code><\/pre>\n<\/div>\n<p>Bu \u00f6rnekte, <code>MIMEMultipart<\/code> ile bir ana mesaj olu\u015fturuyoruz. Ard\u0131ndan, d\u00fcz metin g\u00f6vdesini ve dosya ekini bu mesaja ekliyoruz. Ek i\u00e7in, dosya i\u00e7eri\u011fini ikili (binary) modda okuyup <code>MIMEBase<\/code> nesnesine y\u00fckl\u00fcyoruz. <code>encoders.encode_base64(part)<\/code> ile eki Base64 format\u0131na d\u00f6n\u00fc\u015ft\u00fcr\u00fcyoruz, bu e-posta ekleri i\u00e7in standart bir uygulamad\u0131r. Son olarak, <code>Content-Disposition<\/code> ba\u015fl\u0131\u011f\u0131 ile dosya ad\u0131n\u0131 ve ek oldu\u011funu belirtiyoruz. Bu ad\u0131mlar, herhangi bir t\u00fcrdeki dosyay\u0131 (PDF, resim, belge vb.) e-postan\u0131za g\u00fcvenli bir \u015fekilde eklemenizi sa\u011flar. Bu y\u00f6ntemlerin her biri, Python&#8217;\u0131n yerle\u015fik g\u00fcc\u00fcn\u00fc kullanarak, harici bir ba\u011f\u0131ml\u0131l\u0131\u011fa gerek kalmadan e-posta g\u00f6nderme yetene\u011finizin ne kadar kapsaml\u0131 oldu\u011funu g\u00f6stermektedir.<\/p>\n<h3>Geli\u015fmi\u015f E-posta Senaryolar\u0131: \u00c7oklu Al\u0131c\u0131lar, CC, BCC ve Hata Y\u00f6netimi<\/h3>\n<p>E-posta g\u00f6nderiminde sadece tek bir al\u0131c\u0131ya d\u00fcz metin g\u00f6ndermekle kalm\u0131yoruz; genellikle daha karma\u015f\u0131k senaryolarla kar\u015f\u0131la\u015f\u0131r\u0131z. Birden fazla al\u0131c\u0131ya g\u00f6nderme, karbon kopya (CC), k\u00f6r karbon kopya (BCC) ekleme ve olas\u0131 hatalar\u0131 d\u00fczg\u00fcn bir \u015fekilde y\u00f6netme, modern e-posta otomasyonunun ayr\u0131lmaz par\u00e7alar\u0131d\u0131r. Python&#8217;\u0131n <code>smtplib<\/code> ve <code>email<\/code> mod\u00fclleri, bu geli\u015fmi\u015f ihtiya\u00e7lar\u0131 da kolayl\u0131kla kar\u015f\u0131layabilir.<\/p>\n<h4>1. \u00c7oklu Al\u0131c\u0131lar (To, CC, BCC) Nas\u0131l Y\u00f6netilir?<\/h4>\n<p>E-postalar\u0131n birden fazla ki\u015fiye g\u00f6nderilmesi olduk\u00e7a yayg\u0131nd\u0131r. <code>To<\/code> (Kime), <code>Cc<\/code> (Karbon Kopya) ve <code>Bcc<\/code> (K\u00f6r Karbon Kopya) ba\u015fl\u0131klar\u0131, e-postan\u0131n kimlere gidece\u011fini ve al\u0131c\u0131lar\u0131n birbirlerini g\u00f6r\u00fcp g\u00f6remeyece\u011fini belirler. <code>To<\/code> ve <code>Cc<\/code> adresleri, e-postay\u0131 alan herkes taraf\u0131ndan g\u00f6r\u00fclebilirken, <code>Bcc<\/code> adresleri di\u011fer al\u0131c\u0131lar taraf\u0131ndan gizli tutulur.<\/p>\n<div class=\"code-container\">\n<\/div>\n<p>Burada dikkat edilmesi gereken en \u00f6nemli nokta, <code>mesaj[\"To\"]<\/code> ve <code>mesaj[\"Cc\"]<\/code> ba\u015fl\u0131klar\u0131n\u0131n sadece al\u0131c\u0131 e-posta istemcilerine g\u00f6sterilecek bilgiyi i\u00e7ermesidir. Ger\u00e7ek g\u00f6nderim i\u015flemi s\u0131ras\u0131nda, <code>server.send_message()<\/code> metodunun <code>to_addrs<\/code> parametresine, e-postan\u0131n g\u00f6nderilece\u011fi t\u00fcm adreslerin (<code>To<\/code>, <code>Cc<\/code> ve <code>Bcc<\/code>) bir listesini sa\u011flamam\u0131z gerekir. Bu liste, SMTP sunucusuna e-postan\u0131n kime teslim edilece\u011fini bildirir. <code>Bcc<\/code> adresleri mesaj\u0131n ba\u015fl\u0131klar\u0131nda yer almad\u0131\u011f\u0131 i\u00e7in, al\u0131c\u0131lar birbirlerinin <code>Bcc<\/code> adreslerini g\u00f6remezler, ancak SMTP sunucusu bu adreslere e-postay\u0131 yine de teslim eder.<\/p>\n<h4>2. Sa\u011flam Hata Y\u00f6netimi Nas\u0131l Yap\u0131l\u0131r?<\/h4>\n<p>E-posta g\u00f6nderimi, a\u011f ba\u011flant\u0131lar\u0131, kimlik do\u011frulama sorunlar\u0131, sunucu hatalar\u0131 gibi bir\u00e7ok farkl\u0131 noktada ba\u015far\u0131s\u0131z olabilir. Bu nedenle, kodumuzda sa\u011flam bir hata y\u00f6netimi stratejisi uygulamak kritik \u00f6neme sahiptir. Python&#8217;\u0131n <code>try-except<\/code> bloklar\u0131, bu t\u00fcr durumlar\u0131 ele almak i\u00e7in m\u00fckemmel bir ara\u00e7t\u0131r.<\/p>\n<div class=\"code-container\">\n<pre><code>\nimport smtplib\nfrom email.mime.text import MIMEText\nfrom email.header import Header\nfrom email.utils import formataddr\n\n# E-posta yap\u0131land\u0131rma bilgileri\nGONDEREN_ADRES = \"gonderen@example.com\"\nGONDEREN_SIFRE = \"yanlis_sifre\" # Hata senaryosu i\u00e7in bilerek yanl\u0131\u015f \u015fifre\nALICI_ADRES = \"alici@example.com\"\nSMTP_SUNUCU = \"smtp.gmail.com\"\nSMTP_PORT = 587\n\ndef hata_yonetimli_eposta_gonder():\n    try:\n        mesaj = MIMEText(\"Bu bir hata y\u00f6netimi test e-postas\u0131d\u0131r.\", \"plain\", \"utf-8\")\n        mesaj[\"From\"] = formataddr((str(Header(\"Hata Testi\", \"utf-8\")), GONDEREN_ADRES))\n        mesaj[\"To\"] = ALICI_ADRES\n        mesaj[\"Subject\"] = Header(\"Hata Y\u00f6netimi Denemesi\", \"utf-8\")\n\n        with smtplib.SMTP(SMTP_SUNUCU, SMTP_PORT) as server:\n            server.starttls()\n            print(\"SMTP sunucusuna ba\u011flan\u0131ld\u0131 ve TLS ba\u015flat\u0131ld\u0131.\")\n            \n            try:\n                server.login(GONDEREN_ADRES, GONDEREN_SIFRE)\n                print(\"Kimlik do\u011frulama ba\u015far\u0131l\u0131.\")\n            except smtplib.SMTPAuthenticationError as auth_err:\n                print(f\"Kimlik do\u011frulama hatas\u0131: Kullan\u0131c\u0131 ad\u0131 veya \u015fifre yanl\u0131\u015f. Detay: {auth_err}\")\n                return # Hata durumunda fonksiyonu sonland\u0131r\n\n            server.send_message(mesaj)\n            print(\"E-posta ba\u015far\u0131yla g\u00f6nderildi!\")\n\n    except smtplib.SMTPConnectError as connect_err:\n        print(f\"Ba\u011flant\u0131 hatas\u0131: SMTP sunucusuna ba\u011flan\u0131lamad\u0131. A\u011f ba\u011flant\u0131n\u0131z\u0131 veya sunucu adresini kontrol edin. Detay: {connect_err}\")\n    except smtplib.SMTPRecipientsRefused as refuse_err:\n        print(f\"Al\u0131c\u0131 reddedildi hatas\u0131: Baz\u0131 al\u0131c\u0131 adresleri ge\u00e7ersiz. Detay: {refuse_err.recipients}\")\n    except smtplib.SMTPDataError as data_err:\n        print(f\"Veri hatas\u0131: E-posta i\u00e7eri\u011fiyle ilgili bir sorun olu\u015ftu. Detay: {data_err}\")\n    except smtplib.SMTPException as smtp_err:\n        print(f\"Genel SMTP hatas\u0131 olu\u015ftu: {smtp_err}\")\n    except Exception as e:\n        print(f\"Beklenmeyen bir hata olu\u015ftu: {e}\")\n\n# hata_yonetimli_eposta_gonder()\n  <\/code><\/pre>\n<\/div>\n<p>Bu \u00f6rnekte, farkl\u0131 <code>smtplib<\/code> \u00f6zel istisnalar\u0131n\u0131 yakalayarak daha spesifik hata mesajlar\u0131 \u00fcretiyoruz:<\/p>\n<ul>\n<li><code>smtplib.SMTPAuthenticationError<\/code>: Kullan\u0131c\u0131 ad\u0131 veya \u015fifre yanl\u0131\u015f oldu\u011funda tetiklenir.<\/li>\n<li><code>smtplib.SMTPConnectError<\/code>: SMTP sunucusuna ba\u011flant\u0131 kurulamad\u0131\u011f\u0131nda (yanl\u0131\u015f sunucu adresi, port veya a\u011f sorunu) tetiklenir.<\/li>\n<li><code>smtplib.SMTPRecipientsRefused<\/code>: Bir veya daha fazla al\u0131c\u0131 adresi ge\u00e7ersiz oldu\u011funda tetiklenir.<\/li>\n<li><code>smtplib.SMTPDataError<\/code>: E-posta i\u00e7eri\u011fi veya format\u0131yla ilgili bir sorun oldu\u011funda tetiklenir.<\/li>\n<li><code>smtplib.SMTPException<\/code>: Di\u011fer t\u00fcm <code>smtplib<\/code> ile ilgili hatalar\u0131 kapsar.<\/li>\n<li><code>Exception<\/code>: Yakalanamayan di\u011fer t\u00fcm genel hatalar\u0131 yakalar.<\/li>\n<\/ul>\n<p>Bu detayl\u0131 hata y\u00f6netimi, uygulaman\u0131z\u0131n daha g\u00fcvenilir olmas\u0131n\u0131 sa\u011flar ve sorunlar\u0131 h\u0131zl\u0131 bir \u015fekilde tespit edip \u00e7\u00f6zmenize yard\u0131mc\u0131 olur. Ger\u00e7ek d\u00fcnya senaryolar\u0131nda, bu hata mesajlar\u0131n\u0131 loglamak, kullan\u0131c\u0131ya bildirim g\u00f6ndermek veya otomatik yeniden deneme mekanizmalar\u0131 kurmak gibi ek ad\u0131mlar da d\u00fc\u015f\u00fcnebilirsiniz.<\/p>\n<h3>Ger\u00e7ek D\u00fcnya Senaryosu: Otomatik Bildirim Sistemi ve Vaka Analizi<\/h3>\n<p>\u015eimdiye kadar \u00f6\u011frendi\u011fimiz bilgileri somutla\u015ft\u0131rmak ve Python&#8217;\u0131n yerle\u015fik e-posta yeteneklerinin ger\u00e7ek d\u00fcnyadaki potansiyelini g\u00f6stermek i\u00e7in bir vaka analizine dalal\u0131m. Hayal edin ki, k\u00fc\u00e7\u00fck bir e-ticaret i\u015fletmesi sahibisiniz ve m\u00fc\u015fteri sipari\u015fleri, envanter g\u00fcncellemeleri veya sistem uyar\u0131lar\u0131 gibi kritik bilgileri otomatik olarak e-posta ile bildirmek istiyorsunuz. Harici bir e-posta k\u00fct\u00fcphanesi kurmak yerine, Python&#8217;\u0131n standart <code>smtplib<\/code> ve <code>email<\/code> mod\u00fcllerini kullanarak sa\u011flam ve \u00f6zelle\u015ftirilebilir bir bildirim sistemi kurmaya karar verdiniz.<\/p>\n<h4>Vaka Analizi: E-ticaret Sipari\u015f Onay E-postas\u0131 Otomasyonu<\/h4>\n<p>Bir m\u00fc\u015fteri web sitenizden bir sipari\u015f verdi\u011finde, an\u0131nda bir sipari\u015f onay e-postas\u0131 almas\u0131 gerekir. Bu e-posta, sipari\u015f detaylar\u0131n\u0131, tahmini teslimat s\u00fcresini ve m\u00fc\u015fteri hizmetleri ileti\u015fim bilgilerini i\u00e7ermelidir. Ayr\u0131ca, i\u015fletme sahibine de yeni sipari\u015f hakk\u0131nda bir bildirim gitmelidir. Bu senaryoyu Python ile nas\u0131l otomatikle\u015ftirebiliriz?<\/p>\n<p><strong>Gereksinimler:<\/strong><\/p>\n<ol>\n<li>M\u00fc\u015fteriye HTML format\u0131nda, ki\u015fiselle\u015ftirilmi\u015f bir sipari\u015f onay\u0131 g\u00f6nder.<\/li>\n<li>Sipari\u015f detaylar\u0131n\u0131 (\u00fcr\u00fcnler, fiyatlar, toplam) e-postada tablo \u015feklinde g\u00f6ster.<\/li>\n<li>\u0130\u015fletme sahibine d\u00fcz metin format\u0131nda yeni sipari\u015f bildirimi g\u00f6nder.<\/li>\n<li>Olas\u0131 hatalar\u0131 (SMTP ba\u011flant\u0131s\u0131, kimlik do\u011frulama) d\u00fczg\u00fcn bir \u015fekilde y\u00f6net.<\/li>\n<\/ol>\n<p><strong>Uygulama Ad\u0131mlar\u0131:<\/strong><\/p>\n<div class=\"code-container\">\n<\/div>\n<p>Bu vaka analizinde, <code>MIMEMultipart<\/code> kullanarak m\u00fc\u015fteriye hem d\u00fcz metin hem de HTML versiyonu olan bir e-posta g\u00f6nderdik (bu \u00f6rnekte sadece HTML versiyonu eklendi, ancak <code>MIMEMultipart(\"alternative\")<\/code> ile ikisini de ekleyebilirsiniz). HTML i\u00e7eri\u011fi, sipari\u015f detaylar\u0131n\u0131 d\u00fczenli bir tablo format\u0131nda sunarak okunabilirli\u011fi art\u0131r\u0131r. \u0130\u015fletme sahibine ise daha \u00f6zl\u00fc, d\u00fcz metin bir bildirim g\u00f6nderilir. Her iki e-posta g\u00f6nderimi de ayn\u0131 SMTP ba\u011flant\u0131s\u0131 \u00fczerinden yap\u0131l\u0131r ve olas\u0131 hatalar <code>try-except<\/code> bloklar\u0131yla y\u00f6netilir. Bu, uygulaman\u0131n hem m\u00fc\u015fteriye kar\u015f\u0131 profesyonel g\u00f6r\u00fcnmesini hem de arka planda g\u00fcvenilir bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Bu \u00f6rnek, Python&#8217;\u0131n yerle\u015fik e-posta mod\u00fcllerinin sadece basit g\u00f6revler i\u00e7in de\u011fil, ayn\u0131 zamanda ger\u00e7ek d\u00fcnya i\u015f senaryolar\u0131nda karma\u015f\u0131k ve ki\u015fiselle\u015ftirilmi\u015f otomasyonlar olu\u015fturmak i\u00e7in de ne kadar g\u00fc\u00e7l\u00fc ve esnek oldu\u011funu g\u00f6stermektedir. Harici bir k\u00fct\u00fcphaneye ba\u011f\u0131ml\u0131 kalmadan, t\u00fcm kontrol sizin elinizde olur ve uygulaman\u0131z\u0131n performans\u0131n\u0131, g\u00fcvenli\u011fini ve bak\u0131m\u0131n\u0131 daha iyi y\u00f6netebilirsiniz.<\/p>\n<h3>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<p>Bu makale boyunca, Python&#8217;\u0131n standart k\u00fct\u00fcphanesinde yer alan <code>smtplib<\/code> ve <code>email<\/code> mod\u00fcllerini kullanarak harici bir k\u00fct\u00fcphaneye ihtiya\u00e7 duymadan nas\u0131l e-posta g\u00f6nderece\u011fimizi detayl\u0131 bir \u015fekilde inceledik. Basit metin e-postalar\u0131ndan ba\u015flayarak, HTML i\u00e7erikli mesajlara, dosya eklemeye, \u00e7oklu al\u0131c\u0131lar\u0131 y\u00f6netmeye ve sa\u011flam hata y\u00f6netimi stratejilerine kadar bir\u00e7ok farkl\u0131 senaryoyu ele ald\u0131k. Ayr\u0131ca, bir e-ticaret sipari\u015f onay sistemi \u00f6rne\u011fiyle, bu bilgilerin ger\u00e7ek d\u00fcnya projelerinde nas\u0131l uygulanabilece\u011fini g\u00f6sterdik.<\/p>\n<p>Bu y\u00f6ntem, \u00f6zellikle ba\u011f\u0131ml\u0131l\u0131klar\u0131 minimize etmek, g\u00fcvenlik \u00fczerinde tam kontrol sa\u011flamak veya \u00f6zel e-posta yap\u0131land\u0131rmalar\u0131 uygulamak isteyen geli\u015ftiriciler i\u00e7in paha bi\u00e7ilmezdir. Python&#8217;\u0131n yerle\u015fik g\u00fcc\u00fc, e-posta otomasyonu g\u00f6revlerini &#8220;birinci s\u0131n\u0131f vatanda\u015f&#8221; gibi ele almam\u0131z\u0131 sa\u011flar, projenizin daha hafif, daha g\u00fcvenli ve daha y\u00f6netilebilir olmas\u0131na katk\u0131da bulunur. K\u00fct\u00fcphanesiz bir yakla\u015f\u0131m benimsemek, ayn\u0131 zamanda temel protokoller ve e-posta yap\u0131s\u0131 hakk\u0131nda daha derin bir anlay\u0131\u015f geli\u015ftirmenizi de te\u015fvik eder, bu da sizi daha yetkin bir geli\u015ftirici yapar. Unutmay\u0131n, en iyi ara\u00e7, ihtiyac\u0131n\u0131za en uygun olan\u0131d\u0131r ve bazen en uygun ara\u00e7, zaten elinizde oland\u0131r.<\/p>\n<h4>S\u0131k\u00e7a Sorulan Sorular<\/h4>\n<p><strong>1. Neden pip install ile bir k\u00fct\u00fcphane kurmak yerine smtplib kullanmal\u0131y\u0131m?<\/strong><\/p>\n<p><code>smtplib<\/code> kullanmak, projenizin harici ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 azalt\u0131r, bu da da\u011f\u0131t\u0131m\u0131 kolayla\u015ft\u0131r\u0131r ve potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 d\u00fc\u015f\u00fcr\u00fcr. Ayr\u0131ca, e-posta olu\u015fturma ve g\u00f6nderme s\u00fcreci \u00fczerinde tam kontrol sahibi olursunuz, bu da \u00f6zel ihtiya\u00e7lara g\u00f6re daha fazla esneklik sa\u011flar. Performans ve kaynak kullan\u0131m\u0131 a\u00e7\u0131s\u0131ndan da genellikle daha hafiftir.<\/p>\n<p><strong>2. E-posta sa\u011flay\u0131c\u0131m i\u00e7in hangi SMTP sunucusu ve port numaras\u0131n\u0131 kullanmal\u0131y\u0131m?<\/strong><\/p>\n<p>Bu bilgiler e-posta sa\u011flay\u0131c\u0131n\u0131za g\u00f6re de\u011fi\u015fir. Genellikle, Gmail i\u00e7in <code>smtp.gmail.com<\/code> (port 587 veya 465), Outlook\/Hotmail i\u00e7in <code>smtp.office365.com<\/code> (port 587) veya <code>smtp-mail.outlook.com<\/code> (port 587) kullan\u0131l\u0131r. Kendi e-posta sa\u011flay\u0131c\u0131n\u0131z\u0131n destek belgelerine ba\u015fvurarak do\u011fru sunucu adresini ve port numaras\u0131n\u0131 bulabilirsiniz. Genellikle TLS i\u00e7in 587, SSL i\u00e7in 465 numaral\u0131 port kullan\u0131l\u0131r.<\/p>\n<p><strong>3. Gmail ile e-posta g\u00f6nderirken neden uygulama \u015fifresi kullanmam gerekiyor?<\/strong><\/p>\n<p>Google, g\u00fcvenlik nedenleriyle \u00fc\u00e7\u00fcnc\u00fc taraf uygulamalar\u0131n do\u011frudan hesap \u015fifrenizle oturum a\u00e7mas\u0131na izin vermez. Bunun yerine, Google hesab\u0131n\u0131zda &#8220;Uygulama \u015eifreleri&#8221; olu\u015fturman\u0131z gerekir. Bu \u015fifreler, belirli uygulamalar\u0131n Google hizmetlerine eri\u015fmesi i\u00e7in kullan\u0131lan tek kullan\u0131ml\u0131k \u015fifrelerdir ve ana hesap \u015fifrenizden ba\u011f\u0131ms\u0131zd\u0131r. Bu sayede, uygulaman\u0131z\u0131n g\u00fcvenli\u011fi tehlikeye girse bile ana \u015fifreniz g\u00fcvende kal\u0131r.<\/p>\n<p><strong>4. E-postalar\u0131 g\u00f6nderirken T\u00fcrk\u00e7e karakter sorunlar\u0131 ya\u015f\u0131yorum, ne yapmal\u0131y\u0131m?<\/strong><\/p>\n<p>T\u00fcrk\u00e7e karakter sorunlar\u0131n\u0131 \u00f6nlemek i\u00e7in e-posta mesajlar\u0131n\u0131z\u0131 ve ba\u015fl\u0131klar\u0131n\u0131z\u0131 olu\u015ftururken <code>utf-8<\/code> kodlamas\u0131n\u0131 belirtmeniz \u00f6nemlidir. <code>email.mime.text.MIMEText<\/code> s\u0131n\u0131f\u0131n\u0131 kullan\u0131rken <code>_charset=\"utf-8\"<\/code> parametresini ekleyin. Ayr\u0131ca, <code>email.header.Header<\/code> s\u0131n\u0131f\u0131n\u0131 kullanarak ba\u015fl\u0131klar\u0131 (Subject, From) do\u011fru bir \u015fekilde kodlay\u0131n, bu da T\u00fcrk\u00e7e karakterlerin bozuk g\u00f6r\u00fcnmesini engeller.<\/p>\n<p><strong>5. E-posta g\u00f6nderme h\u0131z\u0131n\u0131 nas\u0131l s\u0131n\u0131rlayabilirim (rate limiting)?<\/strong><\/p>\n<p>\u00c7o\u011fu SMTP sunucusu, spam&#8217;i \u00f6nlemek i\u00e7in g\u00f6nderilen e-posta say\u0131s\u0131na belirli limitler koyar. Bu limitleri a\u015fmamak i\u00e7in, e-posta g\u00f6nderme d\u00f6ng\u00fclerinize <code>time.sleep()<\/code> gibi bir gecikme ekleyebilirsiniz. \u00d6rne\u011fin, her 100 e-postada bir 5 saniye beklemek gibi. Daha geli\u015fmi\u015f senaryolarda, bir kuyruk sistemi (\u00f6rne\u011fin Celery) ve bir token bucket algoritmas\u0131 uygulayarak g\u00f6nderim h\u0131z\u0131n\u0131 daha dinamik bir \u015fekilde y\u00f6netebilirsiniz.<\/p>\n<p>#Python #SMTP #EpostaOtomasyonu #WebGeli\u015ftirme #Yerle\u015fikMod\u00fcller<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/python-send-email-builtin-smtp\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/python-send-email-builtin-smtp<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda e-posta, ki\u015fisel ileti\u015fimden kurumsal otomasyona kadar her alanda vazge\u00e7ilmez bir ara\u00e7.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1403],"tags":[],"class_list":{"0":"post-43304","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-python","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Python ile K\u00fct\u00fcphanesiz E-posta G\u00f6nderme: SMTP&#039;nin G\u00fcc\u00fc - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python ile K\u00fct\u00fcphanesiz E-posta G\u00f6nderme: SMTP&#039;nin G\u00fcc\u00fc\" \/>\n<meta property=\"og:description\" content=\"G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda e-posta, ki\u015fisel ileti\u015fimden kurumsal otomasyona kadar her alanda vazge\u00e7ilmez bir ara\u00e7.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-13T18:04:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-13T18:04:41+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"21 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Python ile K\u00fct\u00fcphanesiz E-posta G\u00f6nderme: SMTP&#8217;nin G\u00fcc\u00fc\",\"datePublished\":\"2026-07-13T18:04:13+00:00\",\"dateModified\":\"2026-07-13T18:04:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/\"},\"wordCount\":3315,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Python\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/\",\"name\":\"Python ile K\u00fct\u00fcphanesiz E-posta G\u00f6nderme: SMTP'nin G\u00fcc\u00fc - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-07-13T18:04:13+00:00\",\"dateModified\":\"2026-07-13T18:04:41+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python ile K\u00fct\u00fcphanesiz E-posta G\u00f6nderme: SMTP&#8217;nin G\u00fcc\u00fc\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Python ile K\u00fct\u00fcphanesiz E-posta G\u00f6nderme: SMTP'nin G\u00fcc\u00fc - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/","og_locale":"tr_TR","og_type":"article","og_title":"Python ile K\u00fct\u00fcphanesiz E-posta G\u00f6nderme: SMTP'nin G\u00fcc\u00fc","og_description":"G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda e-posta, ki\u015fisel ileti\u015fimden kurumsal otomasyona kadar her alanda vazge\u00e7ilmez bir ara\u00e7.","og_url":"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-07-13T18:04:13+00:00","article_modified_time":"2026-07-13T18:04:41+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"21 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Python ile K\u00fct\u00fcphanesiz E-posta G\u00f6nderme: SMTP&#8217;nin G\u00fcc\u00fc","datePublished":"2026-07-13T18:04:13+00:00","dateModified":"2026-07-13T18:04:41+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/"},"wordCount":3315,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Python"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/","url":"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/","name":"Python ile K\u00fct\u00fcphanesiz E-posta G\u00f6nderme: SMTP'nin G\u00fcc\u00fc - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-07-13T18:04:13+00:00","dateModified":"2026-07-13T18:04:41+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/python-ile-kutuphanesiz-e-posta-gonderme-smtpnin-gucu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python ile K\u00fct\u00fcphanesiz E-posta G\u00f6nderme: SMTP&#8217;nin G\u00fcc\u00fc"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/43304","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=43304"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/43304\/revisions"}],"predecessor-version":[{"id":43305,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/43304\/revisions\/43305"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=43304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=43304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=43304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}