質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • Ruby on Rails

    7667questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • PDF

    269questions

    PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

  • メール

    264questions

    メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Railsで自動送信メールにpdfファイルを添付したい

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 287

seiya_ohmachi

score 46

 前提・実現したいこと

Railsでメール機能をつくっています。
CarrierWaveを利用してs3にpdfファイルをアップロードしてからUserMailerでそのpdfファイルをひっぱってきてメールに添付する、ということをしようとしているのですが、下記のような実装をしてもuploads配下にdecision_fileディレクトリが作成されず、またメールが送信されません

 該当のソースコード

#user_controller.rb
  def mail
   @user = User.find_by(id: params[:id])
    @d = DecisionFile.create(file: params[:file], text: params[:text], email: @user.email, user_name: @user.name)
    UserMailer.inform_sign_up_to_user(@d).deliver_later
    redirect_to edit_mail_manage_user_path, notice: '登録情報の通知メールをユーザーに送信しました。'
  end

#decision_file.rb
class DecisionFile < ActiveRecord::Base
  mount_uploader :file, MailAttachmentUploader
end

#mail_attachment_uploader.rb
class MailAttachmentUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
  def extension_white_list
    %W[pdf]
  end

  def filename
    name = "#{Time.now.strftime('%Y%m%d%H%M%S')}.pdf"
    name.downcase
  end

end

#user_mailer
class UserMailer < ApplicationMailer
  default from: "info@mycompany.co.jp"#送信元のメールアドレス設定

  def inform_sign_up_to_user(d)
    @d = d
    attachments['mycompany-account.pdf'] = File.read("/decision_file/file/#{@d.id}/#{Time.now.strftime('%Y%m%d%H%M%S')}.pdf")
    mail(
      subject: Settings.application_name + "お申込みいただきありがとうございます", #メールのタイトル,
      to: @d.email #宛先
    )
  end
end

#rails c
pry(main)> DecisionFile.last
  DecisionFile Load (0.2ms)  SELECT  `decision_files`.* FROM `decision_files`  ORDER BY `decision_files`.`id` DESC LIMIT 1
#<DecisionFile:0x007fe5a75c9ab0> {
            :id => 45,
          :file => #<MailAttachmentUploader:0x007fe5ab063b08 @model=#<DecisionFile id: 45, file: "20180614093551.pdf", text: "【サービスの導入ありがとうございます】\r\n\r\n  こんにちは、test65様。\r\n ...", email: "test65@gmail.com", user_name: "test65", created_at: "2018-06-14 00:35:51", updated_at: "2018-06-14 00:35:51">, @mounted_as=:file, @storage=#<CarrierWave::Storage::File:0x007fe5ab063950 @uploader=#<MailAttachmentUploader:0x007fe5ab063b08 ...>>, @file=#<CarrierWave::SanitizedFile:0x007fe5ab062f50 @file="/Users/mycompany/Desktop/job/contents-store/public/uploads/decision_file/file/45/20180614093551.pdf", @original_filename=nil, @content_type=nil>, @versions={}>,
          :text => "【サービスの導入ありがとうございます】\r\n\r\n  こんにちは、test65様。\r\n  この度は加盟していただきありがとうございます。\r\n\r\n  お客様のユーザーIDとパスワードが登録されました。\r\n\r\n  ユーザーIDとパスワードは添付したPDFファイル内に表記しております。\r\n  大切に保管していただけますようお願いいたしします。\r\n\r\n\r\n  URL -\r\n  https://〜.com",
         :email => "test65@gmail.com",
     :user_name => "test65",
    :created_at => Thu, 14 Jun 2018 09:35:51 JST +09:00,
    :updated_at => Thu, 14 Jun 2018 09:35:51 JST +09:00

 試したこと

rails c で DecisionFile.last と打つと、
:file => の @model=内でファイル名が変換されていて、@file= で保存先も正しく表記されています。
ですが実際には public/uploads配下にdicision_fileディレクトリは作成されていません。

 補足情報

メール送信でsidekiqをつかっています。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

同じタグがついた質問を見る

  • Ruby on Rails

    7667questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • PDF

    269questions

    PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

  • メール

    264questions

    メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。