Office 365 üzerinden SMTP mail gönderim ayarları

Office 365 SMTP

Office 365, uygulama ve sistemlerinizden e-posta göndermek için kullanabileceğiniz güvenli SMTP (Simple Mail Transfer Protocol) hizmeti sunar. Bu rehberde, Office 365 SMTP ayarlarını yapılandırma ve kullanma adımları;

  1. Temel SMTP Ayarları:
    • Sunucu: smtp.office365.com
    • Port: 587
    • Şifreleme: TLS
    • Kimlik doğrulama gerekiyor
  2. İki Faktörlü Doğrulama etkinse uygulama şifresi oluşturma adımları
  3. Farklı Programlama Dillerinde Kullanım Örnekleri:
    • PHP
    • C#
    • Python
    • Node.js
  4. Sık Karşılaşılan Sorunlar ve Çözümleri:
    • Kimlik doğrulama sorunları
    • SMTP erişim engelleri
    • TLS hataları
    • Gönderim limiti sorunları
  5. Güvenlik Önerileri
  6. Exchange Online PowerShell ile SMTP Ayarları Yönetimi

 

SMTP Ayarları Genel Bilgiler

Office 365 için temel SMTP ayarları şunlardır:

Ayar Değer
SMTP Sunucu Adresi smtp.office365.com
Port 587 (TLS/STARTTLS)
Şifreleme Yöntemi TLS (Transport Layer Security)
Kimlik Doğrulama Evet (Kullanıcı adı ve şifre gerekli)
Kullanıcı Adı Office 365 e-posta adresiniz (örn: kullanici@sirketiniz.com)
Şifre Office 365 hesap şifreniz veya uygulama şifresi

Uygulama Şifresi Oluşturma (İki Faktörlü Doğrulama Etkinse)

Office 365 hesabınızda iki faktörlü doğrulama (2FA) etkinse, SMTP kimlik doğrulaması için özel bir uygulama şifresi oluşturmanız gerekir:

  1. https://account.microsoft.com/security adresine gidin ve oturum açın
  2. “Güvenlik” bölümünde “Gelişmiş güvenlik seçenekleri”ne tıklayın
  3. “Uygulama şifreleri” bölümüne gidin
  4. “Yeni uygulama şifresi oluştur” seçeneğini tıklayın
  5. Oluşturulan şifreyi kaydedin (bu şifre yalnızca bir kez gösterilecektir)

Office 365 SMTP’yi Uygulama ve Sistemlerde Kullanma

PHP ile Kullanım Örneği

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);

try {
    //Sunucu ayarları
    $mail->isSMTP();
    $mail->Host       = 'smtp.office365.com';
    $mail->SMTPAuth   = true;
    $mail->Username   = 'kullanici@sirketiniz.com';
    $mail->Password   = 'sifreniz_veya_uygulama_sifreniz';
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port       = 587;

    //Alıcılar
    $mail->setFrom('kullanici@sirketiniz.com', 'Gönderen Adı');
    $mail->addAddress('alici@ornek.com', 'Alıcı Adı');
    $mail->addReplyTo('yanit@sirketiniz.com', 'Yanıt Adresi');

    //İçerik
    $mail->isHTML(true);
    $mail->Subject = 'E-posta Başlığı';
    $mail->Body    = 'Bu bir <b>HTML</b> mesajıdır.';
    $mail->AltBody = 'Bu, HTML mail istemcileri için düz metin sürümüdür';

    $mail->send();
    echo 'Mesaj gönderildi';
} catch (Exception $e) {
    echo "Mesaj gönderilemedi. Hata: {$mail->ErrorInfo}";
}
?>

 

C# ile Kullanım Örneği

using System;
using System.Net;
using System.Net.Mail;

class Program
{
    static void Main()
    {
        try
        {
            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.office365.com");

            mail.From = new MailAddress("kullanici@sirketiniz.com");
            mail.To.Add("alici@ornek.com");
            mail.Subject = "E-posta Testi";
            mail.Body = "Bu bir test e-postasıdır.";

            SmtpServer.Port = 587;
            SmtpServer.Credentials = new NetworkCredential("kullanici@sirketiniz.com", "sifreniz_veya_uygulama_sifreniz");
            SmtpServer.EnableSsl = true;

            SmtpServer.Send(mail);
            Console.WriteLine("E-posta başarıyla gönderildi.");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Hata oluştu: " + ex.Message);
        }
    }
}

Python ile Kullanım Örneği

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

sender_email = "kullanici@sirketiniz.com"
receiver_email = "alici@ornek.com"
password = "sifreniz_veya_uygulama_sifreniz"

message = MIMEMultipart("alternative")
message["Subject"] = "Office 365 SMTP Test"
message["From"] = sender_email
message["To"] = receiver_email

# E-posta içeriği
text = "Merhaba,\nBu bir test e-postasıdır."
html = """\
<html>
  <body>
    <p>Merhaba,<br>
       Bu bir <b>test</b> e-postasıdır.
    </p>
  </body>
</html>
"""

part1 = MIMEText(text, "plain")
part2 = MIMEText(html, "html")

message.attach(part1)
message.attach(part2)

# SMTP sunucusu ile bağlantı kurma
try:
    server = smtplib.SMTP("smtp.office365.com", 587)
    server.starttls()
    server.login(sender_email, password)
    server.sendmail(sender_email, receiver_email, message.as_string())
    print("E-posta başarıyla gönderildi!")
except Exception as e:
    print(f"Hata oluştu: {e}")
finally:
    server.quit()

 

Node.js ile Kullanım Örneği

const nodemailer = require('nodemailer');

// SMTP yapılandırması
let transporter = nodemailer.createTransport({
    host: 'smtp.office365.com',
    port: 587,
    secure: false, // TLS için false
    auth: {
        user: 'kullanici@sirketiniz.com',
        pass: 'sifreniz_veya_uygulama_sifreniz'
    }
});

// E-posta gönderme
let mailOptions = {
    from: '"Şirket Adı" <kullanici@sirketiniz.com>',
    to: 'alici@ornek.com, alici2@ornek.com',
    subject: 'Office 365 SMTP Test',
    text: 'Bu bir test e-postasıdır.',
    html: '<b>Bu bir test e-postasıdır.</b>'
};

transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
        return console.log('Hata:', error);
    }
    console.log('Mesaj gönderildi:', info.messageId);
});

 

Sık Karşılaşılan Sorunlar ve Çözümleri

1. Kimlik Doğrulama Başarısız

Sorun: “5.7.3 Authentication unsuccessful” hatası alıyorsunuz.

Çözüm:

  • Kullanıcı adı ve şifrenin doğru olduğundan emin olun
  • İki faktörlü doğrulama etkinse uygulama şifresi kullanın
  • Hesabınızın kilitli olup olmadığını kontrol edin

2. SMTP Erişimi Engellendi

Sorun: “5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM” hatası alıyorsunuz.

Çözüm:

  • Office 365 Admin merkezinden SMTP kimlik doğrulamasının açık olduğundan emin olun
  • Admin center > Kullanıcılar > Aktif kullanıcılar > E-posta > Posta uygulamaları yönetimi > SMTP Gönderimi açık olmalıdır

3. TLS Hatası

Sorun: “Could not connect to SMTP host: smtp.office365.com, port: 587” hatası alıyorsunuz.

Çözüm:

  • Güvenlik duvarı veya antivirüs programının 587 nolu portu engellememesini sağlayın
  • TLS 1.2 veya daha yeni bir sürüm kullandığınızdan emin olun

4. Gönderim Limiti Aşıldı

Sorun: “Sending limits exceeded” hatası alıyorsunuz.

Çözüm:

  • Office 365, günlük e-posta gönderim limitleri içerir (genellikle 10,000 e-posta/gün)
  • Toplu e-posta gönderimleri için özel Office 365 e-posta hizmetlerini kullanmayı düşünün

Güvenlik Önerileri

  1. Şifreleri Kodunuzda Saklamayın: Çevresel değişkenler veya güvenli yapılandırma yönetimi kullanın
  2. IP Kısıtlamalarını Kullanın: Office 365 Admin merkezinden SMTP erişimine izin verilen IP adreslerini belirleyin
  3. Düzenli Denetim: Office 365 Güvenlik ve Uyumluluk merkezinden SMTP kullanımını düzenli olarak izleyin
  4. SPF, DKIM ve DMARC Kayıtlarını Yapılandırın: E-postalarınızın güvenliğini ve teslim edilebilirliğini artırmak için bu DNS kayıtlarını yapılandırın

Exchange Online PowerShell ile SMTP Ayarlarını Yönetme

SMTP ayarlarını yönetmek için Exchange Online PowerShell modülünü kullanabilirsiniz:

# Exchange Online PowerShell modülünü yükleme
Install-Module -Name ExchangeOnlineManagement

# Exchange Online'a bağlanma
Connect-ExchangeOnline -UserPrincipalName admin@sirketiniz.com

# Bir kullanıcının SMTP ayarlarını kontrol etme
Get-CASMailbox -Identity kullanici@sirketiniz.com | Select SmtpClientAuthenticationDisabled

# SMTP kimlik doğrulamasını etkinleştirme
Set-CASMailbox -Identity kullanici@sirketiniz.com -SmtpClientAuthenticationDisabled $false

Office 365 SMTP hizmeti, uygulamalarınız ve sistemleriniz için güvenilir bir e-posta gönderim altyapısı sunar. Bu rehberdeki ayarları ve örnekleri kullanarak, çeşitli programlama dillerinde ve platformlarda Office 365 SMTP hizmetini kolayca entegre edebilirsiniz.

Modern uygulamalar için Graph API ve Microsoft 365 SDK’larını kullanmak da alternatif bir yaklaşım olabilir, özellikle daha karmaşık e-posta işlemleri yapmanız gerekiyorsa bu seçenekleri değerlendirebilirsiniz.