【vte.cx 응용】 22. 통지 기능과 메일 송수신

오늘은 알림 기능과 메일 송수신에 대해 설명합니다.
이메일 전송과 같은 알림 기능과 결합하면 웹 애플리케이션이 더 대화형이 됩니다.

폴더 아래의 이벤트 알림 기능



폴더에 아래와 같이 rel="via"를 설정하는 것으로, 부하의 엔트리에 대한 갱신계의 조작(POST, PUT, DELETE)을 트리거에, 액션(email, webhook, websocket, push)을 실행하는 것 수 있습니다. (※ push는 mobilepush)
<link rel="via" type="email|webhook|websocket|push" title="POST|PUT|DELETE" /> 



이 기능을 사용하면 그림과 같이 공유 폴더에 데이터를 저장했음을 이메일로 알리는 등의 작업을 쉽게 구현할 수 있습니다. 메일 이외에도 Webhook, websocket, mobilepush 등을 설정할 수 있지만 원리는 동일합니다.

자세한 내용은 문서의 알림 기능을 참조하십시오.

메일 보내기



이벤트가 아닌 능동적으로 조치를 수행할 수도 있습니다.
이 섹션에서는 메일 전송 예에서 설명합니다.

메일 전송은 <link rel="via" type="email"/>와 함께 POST하면 됩니다.
title이 메일 제목, subtitle이 대상, summary가 본문입니다.

다음은 판매 오더 메일의 예입니다. 마지막으로 request.feed가 POST되면 메일이 전송됩니다.
        var email = {};
        email.title = '【〇〇商店】お申込み内容のご確認';
        email.subtitle = entry.customer.customer_email;
        email.summary = '〇〇商店をご利用いただきありがとうございます。\n' +
                        'お申込み内容を下記URLから画面でご確認ください。\n' +
                        '${RXID=/confirm.html}&registration_no='+entry.registration_no +'&uid='+uid+'\n\n' +
                        '【〇〇商店サポートデスク】\n' +
        email.link = [];
        email.link[0] = {};
        email.link[0].___href="/sendmail/"+entry.registration_no;
        email.link[0].___rel="self";      
        email.link[1] = {};
        email.link[1].___type="email";
        email.link[1].___rel="via";      
        request.feed.entry.push(email);

본문에 주문 내용을 확인할 수 있는 화면의 URL이 포함되어 있습니다만, 이것은 RXID라고 하는 원타임 패스워드를 이용하는 것으로 실현하고 있습니다. 자세한 내용은 RXID을 참조하십시오.

그건 그렇고, RXID는 세션을 생성하지만 Linktoken을 사용하면 세션을 생성하지 않고보다 안전하게 액세스 할 수 있습니다.

메일 발송 설정



/_settings/properties의 rights 태그에 메일 전송을 위한 구성 정보를 설명합니다.
다음은 gmail을 사용하는 경우의 예입니다.
구성 정보는 20일째을 참조하십시오.
[email protected]
_mail.from.personal=foo bar,inc
_mail.password=xxxxxx
_mail.transport.protocol=smtps
_mail.smtp.host=smtp.gmail.com
_mail.smtp.port=587
_mail.smtp.auth=true
_mail.smtp.starttls.enable=true

메일 수신



서버 측 JavaScript를 사용하면 메일 전송뿐만 아니라 수신도 가능합니다.
자세한 내용은 메일 수신을 참조하십시오.

다음은 메일 수신 샘플 프로그램입니다. Gmail을 사용한다고 가정합니다.

recvmail.js (서버 측 JavaScript)
module.exports = function() { 

  var settings = new Object();

  settings['mail.pop3.host']='pop.gmail.com';
  settings['mail.pop3.port']='995';
  settings['mail.pop3.connectiontimeout']='60000';
  settings['mail.pop3.socketFactory.class']='javax.net.ssl.SSLSocketFactory';
  settings['mail.pop3.socketFactory.fallback']='false';
  settings['mail.pop3.socketFactory.port']='995';
  settings['username']='[email protected]';
  settings['password']='xxxxx';

  var result = ReflexContext.getMail(settings);

  if (result.feed.entry) {

    var request = { 'feed' : { entry : [] }};

    for(var i=0;i<result.feed.entry.length;i++) {

        var ids = ReflexContext.addids('/registration',1); // 採番
        var entry = {};
        entry.registration_no = ("000000"+ids).slice(-7);
        entry.link = [];
        entry.link[0] = {};
        entry.link[0].___href='/history/'+entry.registration_no;
        entry.link[0].___rel='self';
        entry.link[1] = {};
        entry.link[1].___href='/registration/'+entry.registration_no;
        entry.link[1].___rel='alternate';
        entry.status = 'received';

        var title = result.feed.entry[i].title;        
        entry.customer = {};
        var from = result.feed.entry[i].subtitle;
        if (from.indexOf('<')>=0) {
            from = from.slice(from.indexOf('<')+1,from.indexOf('>'));
        }
        entry.customer.customer_email = from;
        entry.content = {};
        entry.content.___type=result.feed.entry[i].content.___type; 
        entry.content.______text = result.feed.entry[i].content.______text; 

        request.feed.entry.push(entry);
    }
    ReflexContext.post(request);
    ReflexContext.out('{ "result" : '+result.feed.entry.length+' }');  

  }else {
    ReflexContext.out('{ "result" : 0 }');      
  }

};

오늘은 이것 이상입니다.
내일은 서버 측 자바 스크립트를 사용하여 엑셀 출력 방법이 될 것입니다.
그럼.

좋은 웹페이지 즐겨찾기