0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Django】テキストファイルを基にメーラー起動リンク作成

Last updated at Posted at 2019-10-24

mailtoを使えば、a href~で簡単にリンク作れるんですけども、
リンクにカーソルを合わせたとき左下に~の部分が全部出てしまうんですよね。
メールアドレスだけならまだしも、本文がずらーっと出るのはダサいので嫌です!

よって、考えた手段がこちら
①txtから文章を読み込んで(python)
②読み込んだ文章とmailto使ってメーラー起動リンクを作成(javascript)

Djangoでこれを実現するには画面側からpython側にイベントを送らないといけないと思ったので、
javascriptやAjaxを調べつつチャレンジ。

javascript

こちらを参考に、クリックした箇所に対してメーラー起動リンクを作成するようなjsを書きます。
javascriptとはコンソールログで遊んだ程度の付き合いしかありません。

Django側からデータ受け取るためにAjax使ってますが、
こちらからは特に何も送ってないので変な使い方してる気はします。


function sendmail() {
    var is = this;
    
    $.ajax({
        url: "read_mail_text/",//Djangoのurlsに書いてあるパス
        type : 'POST',
        dataType: 'json',
        data : {app: null},//空っぽのjsonを送信
        cache: false,
        // 成功
        success: function(data) {
            //中身確認
            console.log(data["ac"]);
            //受け取った値からmailtoでメーラー起動用のリンク作成
            is.location.href = "mailto:" + data["ac"] + "?subject=" + data["sub"] + "&body=" + data["text"];
            
        },
        // エラー処理
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            alert("Error : " + errorThrown);
       }
   });
    
}

Django

やることは
①Ajaxから呼び出されて
②txtから文章を読み込んで
③jsonを返す
……かと

①Ajaxにお呼ばれするために(Django)

path("read_mail_text/",[アプリ名].read_mail_text,name="read_mail_text")

こんな感じでパスを書いておきます。
敢えて書く必要もない気もしますが、一応メモ。

②txtの中身

最終的にmailtoに組み込むのでそれを準拠に、一行ずつ変数指定しました。
txtの中身は以下のような感じです

ac = "V3 <damidami@v3.mask>"; //送り先のアドレス
sub = "年賀状";//件名
text = "新年おめでとう。%0D%0A%0D%0A今年こそ、裏切り者は殺す。%0D%0AADKデストロンを代表して、ヨロイ元帥。";//本文

エスケープシーケンスのタグでも改行が出来なかった気がするので、改行コードがギエピーしてます。

③javascriptにjsonを返す(Django)

Ajaxのリクエストを受け取ってるので(たぶん)、引数にrequestを入れます。
現在地が分からなかったので、相対パス使ってます。

      def read_mail_text(self,request):
          #txt読込→変数に入れる
          path =os.path.dirname(__file__)+"\\mail_text.txt"
          
          myfile =File(open(path,  'rb'))
          txt=[]
          for t in myfile:
              txt.append(t.decode('utf-8'))
          
          #json形式で返す
          return JsonResponse({'ac':txt[0],'sub':txt[1],'text':txt[2]})

完成

自分の環境で動きましたのでひとまず、タイトルの内容はクリア。
汎用性が低いのがネックですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?