|
Exemplo funciona em versão Rails 2.1.1
Para criar a aplicação nesta versão veja o seguinte artigo : Aplicações Rails em versão específica
O primeiro passo é criar a aplicação:
Depois entre no diretório da aplicação que você criou (no nosso exemplo, é 'email').
cd email
Configure o banco de dados editando o arquivo: config/database.yml
production:
adapter: '''mysql'''<br>
encoding: '''utf8'''<br>
database: '''nomedabase #Coloque aqui o usuário da base de dados'''<br>
username: '''usuariobase #Coloque aqui o usuário da base de dados'''<br>
password: '''senha da base'''<br>
host: '''IP do servidor MYSQL ou mysql01.dominio (Não use "localhost" pois o servidor de banco está separado do web)'''<br>
test: production<br>
development: production<br>
|
Caso ainda não tenha uma base MySQL ativa em sua hospedagem ou se quiser ativar uma nova base específica para sua aplicação rails, consulte esse artigo Ativando uma base MySQL inclusa no plano
Adicionar um arquivo arquivo em sua estrutura : lib/smtp_tls.rb
require "openssl"
require "net/smtp"
Net::SMTP.class_eval do
private
def do_start(helodomain, user, secret, authtype)
raise IOError, 'SMTP session already started' if @started
check_auth_args user, secret, authtype if user or secret
sock = timeout(@open_timeout) { TCPSocket.open(@address, @port) }
@socket = Net::InternetMessageIO.new(sock)
@socket.read_timeout = 60 #@read_timeout
@socket.debug_output = STDERR #@debug_output
check_response(critical { recv_response() })
do_helo(helodomain)
raise 'openssl library not installed' unless defined?(OpenSSL)
starttls
ssl = OpenSSL::SSL::SSLSocket.new(sock)
ssl.sync_close = true
ssl.connect
@socket = Net::InternetMessageIO.new(ssl)
@socket.read_timeout = 60 #@read_timeout
@socket.debug_output = STDERR #@debug_output
do_helo(helodomain)
authenticate user, secret, authtype if user
@started = true
ensure
unless @started
# authentication failed, cancel connection.
@socket.close if not @started and @socket and not @socket.closed?
@socket = nil
end
end
def do_helo(helodomain)
begin
if @esmtp
ehlo helodomain
else
helo helodomain
end
rescue Net::ProtocolError
if @esmtp
@esmtp = false
@error_occured = false
retry
end
raise
end
end
def starttls
getok('STARTTLS')
end
def quit
begin
getok('QUIT')
rescue EOFError
end
end
end
|
Agora, vamos adicionar os códigos abaixo no arquivo /home/LOGIN_DE_FTP/rails_apps/APLICACAO/config/environment.rb depois do último end.
OBSERVAÇÃO:Os dados para a autenticação, são o usuário e senha de FTP
require 'smtp_tls'
ActionMailer::Base.default_content_type = "text/html"
ActionMailer::Base.delivery_method = :sendmail
ActionMailer::Base.smtp_settings = {
:address => "localhost",
:port => 587,
:authentication => :login,
:domain => "dominio",
:user_name => "userftp",
:password => "senha"
}
|
Seguindo, vamos gerar o mailer:
|
script/generate mailer Emailer
|
Editar/criar o nosso model: app/models/emailer.rb
Obs : Altere a variável de instância @recipients com o email no qual deseja receber a mensagem.
class Emailer < ActionMailer::Base
ActionMailer::Base.delivery_method = :sendmail
ActionMailer::Base.sendmail_settings = {
:location => '/usr/sbin/sendmail',
:arguments => '-i -t -f EMAIL@SEUDOMINIO.COM' #após o parâmetro -f coloque um email@seudominio
}
def contact(from, subject, message, name, sent_at = Time.now)
@subject = subject # Titulo do email
@recipients = seuemail@dominio # Destino do email
@from = from # origem do email
@reply_to = from # Responder email para '''(Novidade do rails 2.1)'''
@sent_on = sent_at # Data do email
# Dados para a view
@body["name"] = name
@body["title"] = subject
@body["email"] = from
@body["message"] = message
@headers = {}
end
end
|
Criar um controller chamado Emailers:
|
script/generate controller emailers
|
Dentro dele vamos adicionar o método send_email: app/controllers/emailers_controller.rb
class EmailersController < ApplicationController
def send_email
if request.post?
from = params[:from]
subject = params[:subject]
message = params[:message]
name = params[:name]
if !from.blank? and !subject.blank? and !message.blank? and !name.blank?
Emailer.deliver_contact(from, subject, message, name)
return if request.xhr?
render :text => 'O email foi enviado com sucesso'
else
@form_error = 'Nao foi enviado o email'
end
end
end
end
|
Criar a view para o nosso novo método do controller: app/views/emailers/send_email.html.erb
<% form_tag :action => 'send_email' do %>
<table border="0">
<tr>
<th>Nome:</th>
<td><%= text_field_tag :name %></td>
</tr>
<tr>
<th>Email:</th>
<td><%= text_field_tag :from %></td>
</tr>
<tr>
<th>Assunto:</th>
<td><%= text_field_tag :subject %></td>
</tr>
</table>
<%= text_area_tag :message %> <p />
<%= submit_tag "Enviar" %>
<% end %>
|
Reinicializar a aplicação :
Agora para testar use o endereço: http://dominio/emailers/send_email
Veja também
Links
|