3

Sinatra で最初のポートフォリオ ページを作成しています。

「名前」、「電子メール」、および「コンテンツ」フィールドを含む簡単なフォームを備えた「教科書」連絡先ページがあります。誰かがフォームを送信したときに、メール通知を受け取りたいです。

Pony は、単純な「1 行」のコードで電子メールを送信できると主張しています。Pony のドキュメントを読みましたが、設定方法があまり詳しくありません。

正しく設定していないのか、コードが正しくないのか、Pony が最適なツールではないのか、開発環境でメールの送信が許可されていないのかはわかりません。

以下のコードは、post メソッドから電子メールを送信することを想定しており、メソッドを介して PostgreSQL データベースにデータを保存していますsave_message。データは正しく保持されています。

#server.rb
require 'sinatra'
require 'pony'
require_relative 'model/methods'

get '/contact' do
  erb :contact
end

post '/thankyou' do
  unless params[:name] == '' || params[:email] == '' || params[:content] == ''
    Pony.options = {
      :subject => "Portfolio page: Message delivery from #{params[:name]}",
      :body => "#{params[:content]}",
      :via => :smtp,
      :via_options => {
        :address              => 'smtp.1and1.com',
        :port                 =>  '587',
        :enable_starttls_auto => true,
        :user_name            => ENV["USER_EMAIL_ADDRESS"],
        :password             => ENV["SMTP_PASSWORD"],
        :authentication       => :login,
        :domain               => 'nterrafranca.com'
        }
      }
    Pony.mail(:to => ENV["DESTINATION_EMAIL_ADDRESS"])
    save_message(params[:name], params[:email], params[:content])
  end
  redirect '/'
end
4

2 に答える 2

3

Pony は、メールの宛先、送信者、件名と本文などだけでなく、メールの送信方法を知る必要があります。

ポニーのドキュメントによると、デフォルトで を使用しsendmail、それ以外の場合は SMTP を使用するように設定しますlocalhost。このアプリケーションが実行されている場所によっては、sendmailが利用できない可能性が高く、 で SMTP が構成されていませんlocalhost

私はいくつかのアプリケーションで Pony を使用しました。それぞれ、Pony が SMTP の認証に使用する「noreply@」メール アドレスを設定するため、SMTP 接続には自分のドメインのメール (通常は Google Apps または Gmail) を使用します。例えば:

Pony.options = {
  :subject => "Some Subject",
  :body => "This is the body.",
  :via => :smtp,
  :via_options => {
    :address              => 'smtp.gmail.com',
    :port                 => '587',
    :enable_starttls_auto => true,
    :user_name            => 'noreply@cdubs-awesome-domain.com',
    :password             => ENV["SMTP_PASSWORD"],
    :authentication       => :plain, # :plain, :login, :cram_md5, no auth by default
    :domain               => "localhost.localdomain"
  }
}

Sinatra アプリの場合、呼び出す直前に上記のコードを (明らかな置換を使用して) 実行します。

Pony.mail(:to => <some_email>)

私は何度も Pony を設定しました - まだ問題がある場合はコメントしてください。喜んでお手伝いします。

于 2015-02-16T19:00:37.267 に答える
0

2 段階認証で Gmail アカウントを使用している場合は、Pony メーラー用のアプリケーション固有のパスワードを生成する必要があります。通常の SMTP パスワードは使用しないでください。

https://support.google.com/accounts/answer/185833?hl=jaをご覧ください

通常のパスワードの代わりにアプリケーション固有のパスワードを挿入します。

これは、Github の Pony プロジェクト ページからのものです。

于 2017-09-22T21:32:22.493 に答える