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

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

ただいまの
回答率

90.35%

  • Ruby

    10209questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby Net/SMTP メールにダウンロードリンク貼りたい

解決済

回答 2

投稿 編集

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

kazuyakazuya

score 89

RubyのNet/SMTPを使ってメールを送ることに成功しました。(sendgridを使用)
そのメールにダウンロードリンクを貼りたいです。
以下コード

require 'net/smtp'
a = Net::SMTP.new("smtp.sendgrid.net", 587)
a.enable_starttls
a.start('loalhost'){|smtp|
  smtp.authenticate("sendgridのユーザー","sendgridのパスワード")
  smtp.send_message(<<-EndOfMail, '送信元アドレス', '送信先アドレス')
  From: Your Name <from@example.com>
  To: Dest Address <to@example.net>
  Subject: test mail
  Date: Sat, 23 Jun 2019 18:20:50 +0900
  Message-Id: <unique.message.id.string@yourhost.example.com>
 
 ここにダウンロードリンクを貼りたい
  This is a test mail.
    EndOfMail


 }


上記のコードでメールを送れます。
以下が送りたいファイル(This is sample mail.という文字列が入っているだけのファイル)

This is sample mail.


ファイルを載せたいときどのようにすればいいのでしょうか?

Net/SMTP
ファイルを転送するためのメソッドが用意されているのかと思ったのですが
見た限りなかったです。。。

File.open("sample","r")


ファイルを扱うのだから
上記のようなものを使うと思ったのですが
やはりわからないです。

分からないので参考になるリンクまたは説明をお願いします。

追記

ruby -v 
> ruby 2.4.5p335 (2018-10-18 revision 65137) [x64-mingw32]


メールに「ファイルの添付」をしたくて質問をしました。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • mokemokechicken

    2019/08/14 20:37

    単にDownload用のリンク(URL)を書きたいのでしょうか?
    それともメールに「ファイルの添付」をしたいのでしょうか?

    キャンセル

  • mokemokechicken

    2019/08/14 20:38

    rubyのバージョンも書いておいてもらう方がいいかもしれないです。

    キャンセル

  • mokemokechicken

    2019/08/14 20:47 編集

    あーあと、質問に書いてあるメールアドレスは本物でしょうか?(本物っぽい...)
    もしそうなら、書かないほうが良いと思うので、適当な名前にしておいたほうがいいですよ。
    ※ 将来SPAMメールがすごいことになる可能性があります

    キャンセル

  • kazuyakazuya

    2019/08/14 21:03

    ありがとうございます。
    追記しておきます。
    やはりアドレス公開は危なそうなので消しておきます。

    キャンセル

回答 2

checkベストアンサー

+1

ちょっと意図が読みづらいですが、両方書いておきます。
※ FileをOpenしようとしているので前者ではないと思っていますが、タイトルは前者なので判断が難しいです

ダウンロードリンクを貼りたい場合

ここにダウンロードリンクを貼りたい と書いてあるところにダウンロード用のURLを書けば良いです。

ファイルをメールに添付したい場合

Mailライブラリを使うことをまず検討すると良いと思います。
以下の記事が参考になるかと思います。
第7回 RubyでのメールはMailライブラリにおまかせ!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/14 21:02

    ありがとうございます。

    キャンセル

+1

タイトルのようにダウンロードリンクを書きたいんじゃなくて、ファイルを添付したいと言うことですかね?
SMTPには、添付ファイルという概念は無いです。テキストしか送れません。
ファイルをテキスト化してメールに添付する方法は、昔は色々あったのですが、今はMIMEという方式を使います(Multipurpose Internet Mail Extension)。

どんな方式かは、添付ファイルのあるメールを受信したメールソフトで「ソースを表示」するとわかります。
「ソースを表示」の機能が無いメールソフトの場合は、、、、、ググってください。

普通のメールだと、
Content-Type: text/plain; charset=iso-2022-jp
とかのヘッダがあるところですが、添付有りの場合は、その部分が、
Content-Type: multipart/mixed; boundary="------_abcdefghijklmnopqrstu_"
のような、区切り行(boundary)を指定したマルチパートという形式になります。

自分で作る事もできますが、面倒くさいので、他の回答のとおりMailというGemを使うのが楽です。
自分で作るのも、面倒なだけで難しくは無いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/14 21:28

    ありがとうございます。

    キャンセル

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

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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

  • Ruby

    10209questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。