I want to render received emails (via SMTP Server) that are stored in my DB and my question is:
Is there a gem that provides rendering html_part, text_part from incoming email (received via SMTP Server) or something that can help to render an email depending which type it is (HTML, TEXT) ?
with best regards
Hannes
yes there is a very beautiful gem mailcatcher here github link
Instructions:
1) install the gem configure it by replacing your default setting with
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { :address => "localhost", :port => 1025 }
2) open terminal type mailcatcher enter.
3) send email.
4) now open browser and go to this address localhost:1080.
you will see that you have received email.
MailView from 37signals allows you to render Mailer objects and view them from your browser.
Related
I just started to get error messages of "end of file reached error" from email sent inside the sidekiq worker from couple days ago.
The below code is config setting for action mailer.
config.app_domain = 'www.mydomain.com'
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.default_url_options = {host: config.app_domain }
config.action_mailer.smtp_settings = {
address: 'smtp.mailgun.org',
port: '587',
enable_starttls_auto: true,
user_name: 'postmaster#mydomain.com',
password: 'somepassword',
authentication: :plain,
domain: 'mydomain.com',
}
It's weird to see most of emails are properly sent, but only few emails are being reported. However I'm not at the position being able to ignore these issues in case of a potential hazardous ramification.
Please share any thoughts, any ideas how to ideally manage this error.
Best
In ruby, sockets are IO objects. An EOFError (End of File error) is raised when an operation on the IO object references the end of the file.
The remote email server is closing the socket unexpectedly. If you want to ignore this type of error, you'll need to write your own Worker to replace Sidekiq's built-in ActionMailer delay extension. If you want make it silent, then you can do something like
begin
# your code to send email here
rescue EOFError
# retry by calling the same worker again(if required)
end
Have an alert on time-series based delivery failure alerts which can be on percentage or count of emails not being delivered.
I am using a 3rd party library that sends emails using a HTTP based API.
Is it still possible for me to use ActionMailer to construct the emails and then somehow use ActionMailer to generate the resulting HTML/text for the email which I could then pass to my http email lib to send?
Absolutely. In fact, this is standard practice. You don't need to do anything special, just configure ActionMailer to use the 3rd party of your choice. Here's an example from my production.rb file, using Mailgun:
Rails.application.configure do
# other config stuff goes here...
config.action_mailer.delivery_method = :smtp
config.action_mailer.default_url_options = { host: 'your_domain.com' }
config.action_mailer.smtp_settings = {
authentication: :plain,
address: 'smtp.mailgun.org',
port: 587,
domain: Rails.application.secrets[:mailgun_domain],
user_name: Rails.application.secrets[:mailgun_username],
password: Rails.application.secrets[:mailgun_password]
}
end
Then in your Rails.application.secrets file, you put the info specific to your account.
so I'm using the Pusher Heroku Add-on for my application. The application has live notifications, so when a user receives a message he will see a pop up notification saying "new message". However, In production I am getting the below error:
Firefox can't establish a connection to the server at ws://ws.pusherapp.com/app/b1cc5d4f400faddcb40b?protocol=7&client=js&version=2.1.6&flash=false.
Reload the page to get source for: http://js.pusher.com/2.1/pusher.min.js
And here's the Pusher controller:
class PusherController < ApplicationController
protect_from_forgery :except => :auth # stop rails CSRF protection for this action
def auth
Pusher.app_id = ENV['PUSHER_APP_ID']
Pusher.key = ENV['PUSHER_KEY']
Pusher.secret = ENV['PUSHER_SECRET']
if current_user && params[:channel_name] == "private-user-#{current_user.id}"
response = Pusher[params[:channel_name]].authenticate(params[:socket_id])
render :json => response
else
render :text => "Not authorized", :status => '403'
end
end
end
And I'm using the figaro gem to push the keys to heroku.
What am I doing wrong?
Kind regards
JS
That looks like a problem with Javascript, rather than Rails
We've got pusher working very well with one of our production apps, and it works by firstly having the pusher gem installed, allowing you to call the pusher JS files from your layout:
#app/views/layouts/application.html.erb
<%= javascript_include_tag "http://js.pusher.com/2.1/pusher.min.js" %>
Rails
You may also wish to put the pusher initialization code into an initializer:
#config/initializers/pusher.rb
Pusher.url = ENV["PUSHER_URL"]
Pusher.app_id = ENV["PUSHER_APP_ID"]
Pusher.key = ENV["PUSHER_KEY"]
Pusher.secret = ENV["PUSHER_SECRET"]
This will ensure app-wide connectivity, rather than controller-specific (allowing for greater flexibility)
Firefox can't establish a connection to the server at ws://ws.pusherapp.com/app/b1cc5d4f400faddcb40b?protocol=7&client=js&version=2.1.6&flash=false.
Reload the page to get source for: http://js.pusher.com/2.1/pusher.min.js
This doesn't necessarily mean anything is wrong. it just means that an unsecured WebSocket connection couldn't be established. Pusher's fallback strategy should result in a successful connection being established via either HTTP fallback (HTTP or HTTPS) or via WSS (a secure WebSocket connection).
Failed connection attempts are logged as console errors. There's nothing that can be done about that.
To test this you can bind to connection events and ensure that you are indeed connecting. The pusher-js JavaScript logging will also help determine what's happening.
You can also try http://test.pusher.com/
According to my problem I posted here: mailer error in production only I decided to create a small scaffold app to find a solution.
The problem:
I can't send (newsletter)email with smtp in production, but it works perfectly in development.
You can find the app in my github repository.
I just created a contact_messages scaffold and a simple mailer.
The error log after clicking on the submit button to receive email:
Started POST "/contact_messages" for 194.XXX.XX.XXX at 2013-02-26 19:43:59 +0000
Processing by ContactMessagesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"xx0nxxJ2xwxxJavvZ278EUy2TABjD9CixxNcxDqwg=",
"contact_message"=>{"name"=>"test", "email"=>"test#testemail.com", "message"=>"test1"}, "commit"=>"Create Contact message"}
Rendered contact_mailer/confirmation.text.erb (0.3ms)
Sent mail to test#testemail.com (38ms)
Completed 500 Internal Server Error in 100ms
Errno::ECONNREFUSED (Connection refused - connect(2)):
app/controllers/contact_messages_controller.rb:46:in `create'
The emails get saved, they are listed in the index. So the database should work fine.
I'm using Ubuntu 12.04, Apache, Phusion Passenger, SMTP with Gmail Account.
Could this probably be a server issue, or am I doing something wrong in the app?
I'm using fail2ban and denyhost. Could these tools block smtp?
Any help will be appreciated, thanks!
By default, Rails sends email by connecting to the target SMTP server. Try using sendmail instead. Add this in your config/initializers/production.rb:
config.action_mailer.delivery_method = :sendmail
I solved my problem with a change to a new passwort (api-key) from mandrill. Still don't know what the problem was, because with the old one it worked in development mode...
The working setting:
YourApp::Application.configure do
config.action_mailer.smtp_settings = {
:address => "smtp.mandrillapp.com",
:port => 587,
:enable_starttls_auto => true,
:user_name => "MANDRILL_USERNAME",
:password => "MANDRILL_PASSWORD", # SMTP password is any valid API key
:authentication => 'login'
}
In my rails application I am trying to send mail using custom from address.
It works fine few times, but most of the time it doesn't work.
I am getting the following smtp error message
Net::SMTPFatalError (553 Sorry, your envelope sender is in my badmailfrom list.
):
C:/Ruby/lib/ruby/1.8/net/smtp.rb:687:in `check_response'
C:/Ruby/lib/ruby/1.8/net/smtp.rb:660:in `getok'
C:/Ruby/lib/ruby/1.8/net/smtp.rb:638:in `mailfrom'
C:/Ruby/lib/ruby/1.8/net/smtp.rb:550:in `send0'
C:/Ruby/lib/ruby/1.8/net/smtp.rb:475:in `sendmail'
/vendor/rails/actionmailer/lib/action_mailer/base.rb:638:in `perform_delivery_smtp'
Here is my sample code
In mailer.rb
def mail_to_friend(recipient_mail, sender_mail, subjects, messages, host, port)
#host = host
#port = port
recipients recipient_mail
from "#{sender_mail}" #custom from address
subject "#{subjects}"
sent_on Time.now
body :message_body => messages, :host => host, :port => port
content_type "text/html"
end
I am using Rails 2.3.5 and Ruby 1.8.6.
PS: I am not using google smtp server(using own smtp server)
Thanks in Advance
The owner of the remote SMTP server banned you (or the guy you are impersonating), I guess because you were using their server to test weird stuff without asking for permission (or because what you are doing approximates what spammers do, and you triggered an automatic ban rule).