R.Reddington

WFN Üye
Konular
627
Mesajlar
627
Çözüm
0
Ticaret Puanı
0
Üyelik
25 Gün
Konum
Kastamonu
Web Sitesi
Var
Alanı
Sosyal Backlink
1/1
Konu sahibi
Ruby on Rails’te e-posta göndermek için Action Mailer ile bir ileti sınıfı ve şablonu oluşturun, ardından SMTP sunucusu ayarlarını yapıp iletiyi gönderin. Aşağıdaki örnek, geliştirme ortamından gerçek bir adrese deneme e-postası gönderir; bunun için SMTP erişimi ve sağlayıcının izin verdiği bir gönderen adresi gerekir.

Mailer ve ileti şablonunu oluşturun​

Mevcut Rails uygulamanızın kök dizininde şu komutu çalıştırın:

Kod:
bin/rails generate mailer UserMailer welcome

Oluşturulan app/mailers/user_mailer.rb dosyasındaki sınıfı aşağıdaki gibi düzenleyin. Bu varsayımsal örnek, bir kullanıcı modeli gerektirmeden alıcı adresini doğrudan alır:

Ruby:
class UserMailer < ApplicationMailer
  def welcome(email)
    @email = email
    mail(to: @email, subject: "Hoş geldiniz")
  end
end

app/views/user_mailer/welcome.text.erb dosyasının içeriğini aşağıdaki gibi kaydedin. Bu dosya, gönderilecek iletinin düz metin gövdesidir:

Kod:
Merhaba <%= @email %>,

Hesabınıza hoş geldiniz.

Oluşturucu bir HTML şablonu da oluşturabilir. Bu örnekte yalnız düz metin göndermek için app/views/user_mailer/welcome.html.erb dosyasını silin.

SMTP ayarlarını girin​

SMTP, uygulamanın e-postayı bir gönderim sunucusuna aktarmak için kullandığı protokoldür. Sağlayıcınızdan sunucu adresini, portu, kullanıcı adını, parolayı veya uygulama parolasını, desteklenen kimlik doğrulama yöntemini ve kullanabileceğiniz gönderen adresini alın. Sağlayıcının bu örnekteki plain kimlik doğrulamasını ve STARTTLS yöntemini desteklemesi gerekir; farklı bir yöntem istiyorsa ayarları sağlayıcının bilgilerine göre değiştirin.

config/environments/development.rb dosyasında, mevcut Rails.application.configure do bloğunun içine şunları ekleyin veya varsa ilgili ayarları güncelleyin:

Ruby:
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.smtp_settings = {
  address: ENV.fetch("SMTP_ADDRESS"),
  port: ENV.fetch("SMTP_PORT", "587").to_i,
  domain: ENV.fetch("SMTP_DOMAIN"),
  user_name: ENV.fetch("SMTP_USERNAME"),
  password: ENV.fetch("SMTP_PASSWORD"),
  authentication: :plain,
  enable_starttls: true
}

Buradaki domain, SMTP görüşmesinde bildirilen alan adıdır; sağlayıcınızın istediği değeri kullanın. STARTTLS bağlantıyı şifrelemeye geçirir. Örnekteki 587 varsayılanı her hizmet için geçerli değildir; sağlayıcının verdiği portu ve bağlantı türünü kullanın. Doğrudan TLS kullanan bir sunucu için bu STARTTLS örneğini değiştirmek gerekir.

app/mailers/application_mailer.rb dosyasındaki sınıfı, varsayılan göndereni ortam değişkeninden alacak şekilde düzenleyin:

Ruby:
class ApplicationMailer < ActionMailer::Base
  default from: ENV.fetch("MAIL_FROM")
  layout "mailer"
end

Parolayı kaynak koduna veya Git deposuna yazmayın. Konsolu başlatacağınız ortamda SMTP_ADDRESS, SMTP_PORT, SMTP_DOMAIN, SMTP_USERNAME, SMTP_PASSWORD ve MAIL_FROM değişkenlerini sağlayıcınızın gerçek bilgileriyle tanımlayın.
  1. Gönderen adresi olarak sağlayıcının kullanımına izin verdiği adresi seçin.
  2. Ayarları değiştirdikten sonra açık Rails süreçlerini yeniden başlatın.

Deneme iletisini gönderin ve sonucu kontrol edin​

Uygulama dizininde bin/rails console komutuyla konsolu açın. Aşağıdaki adrese kendi erişebildiğiniz gerçek adresinizi yazarak çalıştırın:

Ruby:
UserMailer.welcome("[email protected]").deliver_now

deliver_now, gönderimi komut çalışırken yapar. İşlem hatasız tamamlanırsa sunucunun iletiyi kabul etmiş olması beklenir; bu, iletinin alıcının gelen kutusuna ulaştığını veya okunacağını garanti etmez. Gelen kutusunu ve gereksiz posta klasörünü kontrol edin. İleti görünmüyorsa sağlayıcının gönderim kayıtlarında alıcı, zaman ve varsa ret veya geri dönüş bilgisini arayın.

Kimlik doğrulama hatasında kullanıcı adını, parolayı ve sağlayıcının istediği doğrulama yöntemini karşılaştırın. Bağlantı veya TLS hatasında sunucu adını, portu, STARTTLS gereksinimini ve uygulamanın sunucuya erişimini kontrol edin. Hata sürerse sağlayıcıya zaman bilgisini, alıcı adresini ve hata kodunu ileterek gönderimin neden reddedildiğini sorun; parola veya gizli anahtar paylaşmayın.

Sık sorulan sorular​

Gönderimi arka planda yapabilir miyim?​

Evet. deliver_now yerine deliver_later kullanıldığında iş Active Job üzerinden kuyruğa verilir. Bunun gerçekten işlenmesi için uygulamanızın kuyruk yapılandırmasının ve gerekiyorsa işçi sürecinin çalışması gerekir. İşin kuyruğa alınması, e-postanın teslim edildiği anlamına gelmez.

Gerçek alıcıya göndermeden deneyebilir miyim?​

Evet. Geliştirme ortamında yerel bir SMTP yakalayıcı kullanarak iletiyi gerçek alıcıya göndermeden içeriğini inceleyebilirsiniz. Bu durumda SMTP adresini ve portunu yakalayıcının çalıştığı ortama göre ayarlayın; yakalanan bir ileti, gerçek sağlayıcı üzerinden teslimatın başarılı olacağını kanıtlamaz.
 
Moderatör tarafında düzenlendi:

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic