Ruby on Rails 2.1 - E-posta Gönderme
ActionMaileruygulamaların e-posta gönderip almasını sağlayan Rails bileşenidir. Bu bölümde, Rails kullanarak nasıl e-posta gönderileceğini göreceğiz.
Oluşturarak başlayalım emails aşağıdaki komutu kullanarak proje.
C:\ruby> rails -d mysql emails
Burada kullanıyoruz -d mysqlMySQL veritabanını kullanma ilgimizi belirtme seçeneği. Oracle veya postgress gibi diğer herhangi bir veritabanı adını belirleyebiliriz .-dseçeneği. Varsayılan olarak Rails,SQLite veri tabanı.
Veritabanını Kurmak
Uygulamamızda bir veritabanı kullanmıyor olsak da, devam etmek için Rails'in buna ihtiyacı var. Öyleyse bu ek adımları gerçekleştirelim.
Aşağıda bir veritabanı oluşturmanın yolu verilmiştir -
mysql> create database emails;
Query OK, 1 row affected (0.01 sec)
mysql> grant all privileges on emails.*
to 'root'@'localhost' identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
Rails'i veritabanını bulmaya yönlendirmek için, ~ \ upload \ config \ database.yml yapılandırma dosyasını düzenleyin ve veritabanı adını yemek kitabı olarak değiştirin. Bitirdiğinizde aşağıdaki gibi görünmelidir -
development:
adapter: mysql
encoding: utf8
database: emails
username: root
password: password
host: localhost
test:
adapter: mysql
encoding: utf8
database: emails
username: root
password: password
host: localhost
production:
adapter: mysql
encoding: utf8
database: emails
username: root
password: password
host: localhost
Action Mailer - Yapılandırma
Fiili çalışmaya devam etmeden önce yapılandırmanızı tamamlamak için izlemeniz gereken adımlar aşağıdadır. -
E-posta projenizin yapılandırma klasörüne gidin ve environment.rb dosyasını açın ve aşağıdaki satırı bu dosyanın altına ekleyin.
ActionMailer::Base.delivery_method = :smtp
ActionMailer'a SMTP sunucusunu kullanmak istediğinizi bildirir. Mac OS X veya Linux gibi Unix tabanlı bir işletim sistemi kullanıyorsanız, bunu şu şekilde de ayarlayabilirsiniz: sendmail.
Aşağıdaki kod satırlarını da environment.rb'nin altına ekleyin.
ActionMailer::Base.smtp_settings = {
:address => "smtp.tutorialspoint.com",
:port => 25,
:domain => "tutorialspoint.com",
:authentication => :login,
:user_name => "username",
:password => "password",
}
Her bir karma değerini Basit Posta Aktarım Protokolü (SMTP) sunucunuz için uygun ayarlarla değiştirin. Henüz bilmiyorsanız, bu bilgileri İnternet Servis Sağlayıcınızdan alabilirsiniz. Standart SMTP sunucusu kullanıyorsanız, 25 numaralı bağlantı noktasını ve kimlik doğrulama türünü değiştirmenize gerek yoktur.
Ayrıca varsayılan e-posta mesajı formatını da değiştirebilirsiniz. E-postayı düz metin biçimi yerine HTML biçiminde göndermeyi tercih ediyorsanız, aşağıdaki satırı da config / environment.rb'ye ekleyin -
ActionMailer::Base.default_content_type = "text/html"
ActionMailer :: Base.default_content_type, "metin / düz", "metin / html" ve "metin / zenginleştirilmiş" olarak ayarlanabilir. Varsayılan değer "metin / düz" dür.
Sonraki adım, bir posta gönderisi oluşturmaktır.
Posta Gönderisi Oluşturun
Posta gönderisi oluşturmak için aşağıdaki komutu kullanın:
C:\ruby\> cd emails
C:\ruby\emails> ruby script/generate mailer Emailer
App / models dizininde bir emailer.rb dosyası oluşturacaktır. Bu dosyanın içeriğini aşağıdaki şekilde kontrol edin -
class Emailer < ActionMailer::Base
end
Şimdi ActionMailer :: Base sınıfının içinde aşağıdaki gibi bir yöntem oluşturalım -
class Emailer < ActionMailer::Base
def contact(recipient, subject, message, sent_at = Time.now)
@subject = subject
@recipients = recipient
@from = '[email protected]'
@sent_on = sent_at
@body["title"] = 'This is title'
@body["email"] = '[email protected]'
@body["message"] = message
@headers = {}
end
end
İletişim yönteminin dört parametresi vardır: bir alıcı, bir konu, bir mesaj ve e-postanın ne zaman gönderileceğini tanımlayan bir sent_at. Yöntem ayrıca her ActionMailer yönteminin bir parçası olan altı standart parametreyi tanımlar -
@subject e-posta konusunu tanımlar.
@body, posta şablonunu doldurabileceğiniz değerler içeren bir Ruby hash'idir. Üç anahtar / değer çifti oluşturdunuz: başlık, e-posta ve mesaj
@recipients, mesajın gönderildiği kişilerin listesidir.
@from, e-postanın kimden olduğunu tanımlar.
@sent_on sent_at parametresini alır ve e-postanın zaman damgasını ayarlar.
@headers, e-posta başlıklarını değiştirmenizi sağlayan başka bir karmadır. Örneğin, düz metin veya HTML e-posta göndermek istiyorsanız, e-postanın MIME türünü ayarlayabilirsiniz.
Denetleyicinin Oluşturulması
Şimdi bu uygulama için aşağıdaki gibi bir kontrolör oluşturacağız -
C:\ruby\emails> ruby script/generate controller Emailer
Bir denetleyici yöntemi tanımlayalım sendmail app / controllers / emailer_controller.rb'de, gerçek bir e-posta göndermek için Model yöntemini aşağıdaki gibi çağırır -
class EmailerController < ApplicationController
def sendmail
recipient = params[:email]
subject = params[:subject]
message = params[:message]
Emailer.deliver_contact(recipient, subject, message)
return if request.xhr?
render :text => 'Message sent successfully'
end
end
Postanın iletişim yöntemini kullanarak e-posta göndermek için, şunu eklemelisiniz: deliver_ yöntem adının başına. Tarayıcının JavaScript'i desteklememesi durumunda Rails Java Script'e (RJS) geçebilmek için bir return if request.xhr? Eklersiniz ve ardından yönteme bir metin mesajı oluşturma talimatı verirsiniz.
E-posta göndermek için kullanıcı bilgilerini alacağınız bir ekran hazırlamak dışında neredeyse tamamladınız. Denetleyicide bir ekran yöntemi indeksi tanımlayalım ve ardından bir sonraki bölümde gerekli tüm görünümleri tanımlayacağız -
Aşağıdaki kodu emailer_controller.rb dosyasına ekleyin.
def index
render :file => 'app\views\emailer\index.html.erb'
end
Görünümleri Tanımlama
App \ views \ e-postalar \ index.html.erb'de bir görünüm tanımlayın. Bu, uygulama için varsayılan sayfa olarak adlandırılacak ve kullanıcıların mesaj girmesine ve gerekli e-postayı göndermesine izin verecektir -
<h1>Send Email</h1>
<% form_tag :action => 'sendmail' do %>
<p><label for="email_subject">Subject</label>:
<%= text_field 'email', 'subject' %></p>
<p><label for="email_recipient">Recipient</label>:
<%= text_field 'email', 'recipient' %></p>
<p><label for="email_message">Message</label><br/>
<%= text_area 'email', 'message' %></p>
<%= submit_tag "Send" %>
<% end %>
Yukarıdaki görünümden ayrı olarak, mesaj gönderirken Emailer'ın iletişim yöntemi tarafından kullanılacak bir şablona daha ihtiyacımız var. Bu sadece standart Rails <% =%> yer tutuculu metindir.
Aşağıdaki kodu app/views/contact.html.erb dosya.
Hi!
You are having one email message from <%= @email %> with a title
<%= @title %>
and following is the message:
<%= @message %>
Thanks
Test İçin Dinlenme
Test etmeden önce, makinenizin internete bağlı olduğundan ve E-posta Sunucunuzun ve Web Sunucunuzun çalışır durumda olduğundan emin olun.
Şimdi http://127.0.0.1:3000/Emailer/index kullanarak uygulamanızı test edin. Aşağıdaki ekranı görüntüler ve bu ekranı kullanarak mesajınızı herhangi birine gönderebilirsiniz.
Bir mesaj gönderdikten sonra, metin mesajı - "Mesaj başarıyla gönderildi" görüntülenecektir.
Rails Kullanarak HTML E-postaları Gönderme
Postaları HTML olarak göndermek için, görünümünüzün (.erb dosyası) HTML ürettiğinden emin olun ve içerik türünü html olarak ayarlayın. emails/app/models/emailer.rb aşağıdaki gibi dosya -
class Emailer < ActionMailer::Base
def contact(recipient, subject, message, sent_at = Time.now)
@subject = subject
@recipients = recipient
@from = '[email protected]'
@sent_on = sent_at
@body["title"] = 'This is title'
@body["email"] = '[email protected]'
@body["message"] = message
@headers = {content_type => 'text/html'}
end
end
Hakkında eksiksiz bir ayrıntı için ActionMailer, lütfen standart Ruby belgelerine bakın.