E-posta · Resend · SMTP · DNS
Uygulamanın maillerini Resend'e taşımak
Şifre sıfırlama, bildirim gibi uygulama maillerini kendi mail hesabının SMTP'sinden ayır. Resend'de alan adı doğrulama, DNS kayıtları, güvenli API anahtarı, SMTP ya da API ile bağlama ve test.
- Süre
- 20 dk
- Seviye
- Orta
- Adım
- 6
- Prompt
- 1
Uygulamanın gönderdiği mailler (şifre sıfırlama, kayıt onayı, bildirim) çoğu zaman kendi iş ya da kişisel mail hesabının SMTP'sinden çıkıyor. Başta sorun yok. Kullanıcı arttıkça risk büyüyor. Bu rehberde o mailleri Resend'e nasıl taşıyacağını adım adım anlattım. Ben bunu kendi kişisel finans uygulamamda yaptım. Komutların ve kodların sağ üstündeki Kopyala butonuna bas, yapıştır, devam et.
Ne yapacağız
Uygulamanın maillerini kendi mail hesabından ayırıp Resend'e taşıyacağız. Önce neden.
Uygulama maillerini Google Workspace gibi bir iş hesabının SMTP'sinden göndermenin üç riski var:
- Gönderim limiti. Mail hesapları insanlar için tasarlanmış, günlük gönderim sınırı var. Uygulama büyüdükçe bu limit dolabilir. Dolunca şifre sıfırlama mailleri de, senin iş maillerin de gitmeyebilir.
- İtibar. Asıl risk bu. Uygulama ile iş maili aynı hesabı ve alan adını paylaşıyorsa, kullanıcılar uygulama mailini spam işaretlediğinde bu işaret alan adının itibarına yazılıyor. Sonra senin normal iş maillerin de spam'e düşmeye başlayabilir.
- Körlük. Hangi mail ulaştı, hangisi geri döndü, hangisi spam'e düştü? Normal mail kutusunda bunu göremezsin. Kullanıcı "mail gelmedi" dediğinde elinde bakacak bir kayıt olmaz.
SMTP kötü değil. SMTP, maillerin gönderilme kuralı. Karayolunun trafik kuralları gibi düşün: araba da kamyon da aynı kurallarla gidiyor. Resend de SMTP destekliyor. Mesele protokol değil. Mesele uygulamanın mailini kendi mail kutundan ayırmak.
Resend tek seçenek de değil. Amazon SES ve Postmark da aynı işi yapıyor. Ben Resend'i paneli sade, kurulumu kısa olduğu için seçtim.
Sonuçta elinde üç şey olacak:
- Resend'de doğrulanmış alan adın
- Uygulamanın maillerini Resend'den gönderen bir bağlantı (SMTP ya da API)
- Hangi mailin ulaştığını gösteren bir gönderim kaydı
Resend'e kayıt ol ve alan adını ekle
- Resend'e kayıt ol.
- Sol menüden Domains bölümüne gir, Add domain'e bas.
- Alan adını yaz:
alanadin.com. - Bölgeyi seç. Kullanıcılarının çoğu Türkiye ya da Avrupa'daysa AB bölgesini (Avrupa /
eu-west-1) seçmek mantıklı.
Bölge alan adı eklenirken seçiliyor. Sonradan değiştirmek için alan adını silip yeniden eklemen gerekebilir; o yüzden baştan doğru seç.
DNS kayıtlarını gir
Alan adını ekleyince Resend sana birkaç DNS kaydı gösteriyor (MX, SPF için TXT, DKIM için TXT). Bunlar "bu alan adı adına Resend mail gönderebilir" demenin yolu.
Cloudflare kullanıyorsan: Panelde Cloudflare için otomatik kurulum seçeneği çıkıyor. Cloudflare hesabına giriş yapıp onaylıyorsun, kayıtlar tek tıkla ekleniyor.
Başka bir DNS sağlayıcısı kullanıyorsan: Panelin gösterdiği kayıtları DNS paneline tek tek elle gir. İki şeye dikkat et:
- Name alanına alan adını tekrar yazma.
send.alanadin.comdeğil, sadecesendyaz. Çoğu panel alan adını kendisi ekliyor. - Cloudflare'de elle giriyorsan kayıtların proxy'si kapalı olmalı (DNS only, gri bulut).
Kayıt değerlerini bu rehberden kopyalama. Resend panelinde ne görüyorsan onu gir. Değerler hesaba ve alan adına göre değişiyor.
Kayıtları girdikten sonra Resend'de Verify'a bas. Doğrulama birkaç dakika ile birkaç saat arası sürebilir. Bende yaklaşık 20 dakika sürdü.
Ek öneri: DMARC kaydı. DMARC, alıcı sunuculara "SPF ya da DKIM tutmazsa ne yapayım" sorusunun cevabını veriyor. Yoksa bir tane ekle:
textTür: TXT Name: _dmarc Değer: v=DMARC1; p=none;
Alan adında zaten bir
_dmarckaydı varsa ikincisini ekleme. Bir alan adında tek DMARC kaydı olur.- Name alanına alan adını tekrar yazma.
API anahtarı oluştur
- Sol menüden API Keys bölümüne gir, Create API key'e bas.
- Bir ad ver (ör.
uygulama-prod). - Permission: Sending access seç. Full access değil. Uygulamanın tek işi mail göndermek; anahtar sızarsa saldırgan hesabını yönetemesin.
- Domain: yalnız bu alan adını seç.
Alan adı doğrulanmadan listede çıkmayabilir. O durumda şimdilik anahtarı aç, doğrulama bitince bu alan adıyla sınırlı yeni bir anahtar oluştur ve eskisini sil.
Anahtar
re_ile başlıyor ve yalnız bir kez gösteriliyor. Hemen şifre yöneticine kaydet. Koda, repoya, ekran görüntüsüne yazma. Sunucuda ortam değişkeninde (env) dursun:TerminalRESEND_API_KEY=re_xxxxxxxx
Uygulamana bağla
İki yol var. Kodunu neredeyse hiç değiştirmek istemiyorsan SMTP, Node.js / Next.js kullanıyorsan API.
SMTP ile (kod neredeyse değişmez)
Uygulamanın SMTP ayarlarını şöyle değiştir:
textHost: smtp.resend.com Kullanıcı adı: resend Şifre: API anahtarın (re_...) Port: 465 (SSL) ya da 587 (STARTTLS)
Gönderen adres doğrulanmış alan adından olmalı, ör.
bildirim@alanadin.com. Başka bir alan adından gönderemezsin.WordPress örneği. Önce anahtarı
wp-config.php'de ortam değişkeninden oku:phpdefine( 'RESEND_API_KEY', getenv( 'RESEND_API_KEY' ) );
Sonra temanın
functions.phpdosyasına ya da küçük bir eklentiye şunu ekle:phpadd_action( 'phpmailer_init', function ( $phpmailer ) { $phpmailer->isSMTP(); $phpmailer->Host = 'smtp.resend.com'; $phpmailer->SMTPAuth = true; $phpmailer->Username = 'resend'; $phpmailer->Password = RESEND_API_KEY; $phpmailer->Port = 465; $phpmailer->SMTPSecure = 'ssl'; $phpmailer->From = 'bildirim@alanadin.com'; $phpmailer->FromName = 'Uygulamanın Adı'; } );WordPress'in gönderdiği bütün mailler artık Resend'den çıkıyor.
API ile (Node.js / Next.js)
Paketi kur:
Terminalnpm install resend
Mail gönder:
JavaScriptimport { Resend } from 'resend'; const resend = new Resend(process.env.RESEND_API_KEY); const { data, error } = await resend.emails.send({ from: 'Uygulamanın Adı <bildirim@alanadin.com>', to: ['kullanici@example.com'], subject: 'Şifre sıfırlama', html: '<p>Şifreni sıfırlamak için bağlantıya tıkla.</p>', }); if (error) console.error(error);İstersen bu işi Claude Code'a da yaptırabilirsin:
PromptBu projenin gönderdiği bütün mailleri Resend'e taşıyacağım. 1. Projede mail gönderen her yeri bul (SMTP ayarı, mail kütüphanesi, wp_mail, nodemailer vs.) ve bana listele. 2. SMTP kullanıyorsa ayarları smtp.resend.com, kullanıcı adı "resend", port 465 olacak şekilde değiştir. Şifreyi RESEND_API_KEY ortam değişkeninden oku. 3. Gönderen adresi bildirim@<ALAN ADIM> yap. 4. API anahtarını hiçbir dosyaya yazma, repoya ekleme. .env dosyası .gitignore'da mı kontrol et. Değişiklikleri yapmadan önce planı bana göster.
Test et
- Uygulamandan kendine bir şifre sıfırlama maili iste.
- Resend panelinde Emails (gönderim kayıtları) bölümüne bak. Mail Delivered görünmeli.
- Maili Gmail'de aç. Sağ üstteki ⋮ menüsünden Show original (Türkçe arayüzde Orijinali göster) seç.
- SPF, DKIM ve DMARC satırlarının üçü de PASS olmalı.
- Gönderen adres yeni alan adından gelmeli (
bildirim@alanadin.com), eski mail hesabından değil.
Sonra
- Birkaç gün sorunsuz giderse eski SMTP kimlik bilgisini (uygulama şifresi vs.) iptal et. Kullanılmayan şifre açık bir kapıdır.
- Hacim artınca planının günlük ve aylık limitine bak.
- Bounced (geri dönen) ve complained (spam işaretlenen) olayları için webhook bağla. Geçersiz bir adrese tekrar tekrar mail atmak alan adının itibarını düşürür; bu adresleri listenden çıkar.
Püf noktaları
"Domain is not verified" hatası. Doğrulama bitmeden göndermeye çalışıyorsun. Resend'de alan adının durumuna bak, Verified olmasını bekle.
Doğrulama bitmiyor. Name alanına alan adını iki kez yazmış olabilirsin (send.alanadin.com.alanadin.com). DNS panelinde kaydın tam adına bak, gerekiyorsa sadece send olarak düzelt.
Cloudflare'de kayıt eklenmiyor ya da doğrulanmıyor. Kaydın proxy'si açık olabilir. Turuncu bulutu kapat, DNS only yap.
Mail gidiyor ama spam'e düşüyor. "Show original" ekranında DKIM ve DMARC'a bak. PASS değilse DNS kayıtlarını Resend panelindekiyle karşılaştır. DMARC kaydın yoksa ekle.
Bitti mi?
- Resend'de alan adımı ekledim, bölgeyi seçtim
- DNS kayıtlarını girdim, alan adı Verified
- (Önerilen)
_dmarckaydı var - Yalnız Sending access yetkili, alan adıyla sınırlı API anahtarı açtım
- Anahtar şifre yöneticisinde ve sunucuda env değişkeninde, repoda değil
- Uygulamayı SMTP ya da API ile bağladım
- Test mailinde SPF, DKIM, DMARC: PASS
- Birkaç gün sonra eski SMTP kimlik bilgisini iptal ettim
Takıldığın yeri Instagram'da yaz, rehbere eklerim.