0

我正在处理来自 Sinatra Jump Start 的联系表格,并试图弄清楚为什么“发件人”总是与我使用的 :user_name 相同的 gmail 帐户。我有一个 Heroku 版本,它也总是一样的:from。我的目标是让有姓名、电子邮件和消息的小联系表发送到接收电子邮件,“发件​​人”将是发件人的姓名和电子邮件。

我想这可能是因为本地版本,但在 Heroku 上的结果是一样的。设置:user_name最终作为“发件人”我做错了什么,有什么想法吗?

那是:from => params[:name] + "<" + params[:email] + ">"不是不再正确,我正在使用的书不是太旧。

这是我的contact.slim表单的样子:

p You can contact  me by filling in the form below:
form class="contact" action="/contact" method="POST"
  p
    label for="name" Name:
    input type="text" name="name"
  p
    label for="email" Email:
    input type="text" name="email"
  p
    label for="message" Your Message:
    textarea name="message"
  input type="submit" value="Send Message"

这是我的send_message

 def send_message
    Pony.mail(
      # this always comes back as the same gmail.account I'm using for the :user_name
      :from => params[:name] + "<" + params[:email] + ">", 
      :to => 'mygmail@gmail.com',
      :subject => params[:name] + " from #{params[:email]} has contacted you ",
      :body => params[:message],
      :via => :smtp,
      :via_options => {
        :address              => 'smtp.gmail.com',
        :port                 => '587',
        :enable_starttls_auto => true,
        :user_name            => 'mygmail@gmail.com',
        :password             => 'mypassword',
        :authentication       => 'plain',
        :domain               => 'localhost.localdomain'
      })
  end

还有我的邮政路线处理程序main.rb

post '/contact' do
  send_message
  flash[:notice] = "Thank you for your message. We'll be in touch soon."
  redirect to("/")
end

然后,当我尝试使用 Heroku 时,我有这个main.rb

configure :development do
  # for the local MySQL db
  DataMapper.setup(:default, 'mysql://root:admin@localhost/sinatra_jumpstart')
  set :email_address      => 'smtp.gmail.com',
      :email_user_name    => 'mygmail@gmail.com',
      :email_password     => 'mypassword',
      :email_domain       => 'localhost.localdomain'
end

configure :production do
  # for Heroku
  DataMapper.setup(:default, ENV[ 'DATABASE_URL' ])
  set :email_address      => 'smtp.sendgrid.net',
      :email_user_name    => ENV['SENDGRID_USERNAME'],
      :email_password     => ENV['SENDGRID_PASSWORD'],
      :email_domain       => 'heroku.com'
end

更新:似乎我的目标是能够回复,有一个:reply_to选项可以传递params[:email]给,但这仍然让我想知道为什么“发件人”正确显示名称(来自params[:name]),但忽略params[:email]对于“发件人”电子邮件地址,而是显示我的:user_name电子邮件:via_options

4

1 回答 1

0

这个答案来自一个站点讨论。

您正在从您的网页发送表单,因此发件人就是您自己。如果您正在打开发件人电子邮件软件(使用 html 邮件功能?)并且用户从该软件发送,它将拥有他们的电子邮件地址。

当用户收到另一个用户的电子邮件并使用“回复”时,这种情况在论坛中经常发生。然后将电子邮件发送给论坛管理员。消息上通常会有一条注释,上面写着“请勿回复此消息,但请在论坛消息部分回复”。

于 2015-01-21T01:47:32.197 回答