mirror of
				https://github.com/node-red/node-red-nodes.git
				synced 2025-03-01 10:37:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			588 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			588 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<script type="text/html" data-template-name="e-mail">
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-name"><i class="fa fa-envelope"></i> <span data-i18n="email.label.to"></span></label>
 | 
						|
        <input type="text" id="node-input-name" placeholder="email@address.com">
 | 
						|
    </div>
 | 
						|
    <!-- <div class="form-row">
 | 
						|
        <label for="node-input-pin"><i class="fa fa-asterisk"></i> Service</label>
 | 
						|
        <select type="text" id="node-input-pin" style="width: 150px;">
 | 
						|
            <option value="-" disabled> </option>
 | 
						|
            <option value="DynectEmail">DynectEmail</option>
 | 
						|
            <option value="Gmail">Gmail</option>
 | 
						|
            <option value="hot.ee">hot.ee</option>
 | 
						|
            <option value="Hotmail">Hotmail</option>
 | 
						|
            <option value="iCloud">iCloud</option>
 | 
						|
            <option value="mail.ee">mail.ee</option>
 | 
						|
            <option value="Mail.Ru">Mail.Ru</option>
 | 
						|
            <option value="Mailgun">Mailgun</option>
 | 
						|
            <option value="Mailjet">Mailjet</option>
 | 
						|
            <option value="Mandrill">Mandrill</option>
 | 
						|
            <option value="Postmark">Postmark</option>
 | 
						|
            <option value="QQ">QQ</option>
 | 
						|
            <option value="QQex">QQex</option>
 | 
						|
            <option value="SendGrid">SendGrid</option>
 | 
						|
            <option value="SendCloud">SendCloud</option>
 | 
						|
            <option value="SES">SES</option>
 | 
						|
            <option value="Yahoo">Yahoo</option>
 | 
						|
            <option value="yandex">yandex</option>
 | 
						|
            <option value="Zoho">Zoho</option>
 | 
						|
         </select>
 | 
						|
    </div> -->
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-server"><i class="fa fa-globe"></i> <span data-i18n="email.label.server"></span></label>
 | 
						|
        <input type="text" id="node-input-server" placeholder="smtp.gmail.com">
 | 
						|
    </div>
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-port"><i class="fa fa-random"></i> <span data-i18n="email.label.port"></span></label>
 | 
						|
        <input type="text" id="node-input-port" placeholder="465" style="width:100px">
 | 
						|
        <label style="width:40px"> </label>
 | 
						|
        <input type="checkbox" id="node-input-secure" style="display:inline-block; width:20px; vertical-align:baseline;">
 | 
						|
        <span data-i18n="email.label.useSecureConnection"></span>
 | 
						|
    </div>
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-authtype"><i class="fa fa-tasks"></i> <span data-i18n="email.label.authtype"></span></label>
 | 
						|
        <select type="text" id="node-input-authtype">
 | 
						|
            <option value="BASIC">Basic</option>
 | 
						|
            <option value="XOAUTH2">XOAuth2</option>
 | 
						|
        </select>
 | 
						|
    </div>
 | 
						|
    <div class="form-row node-input-userid">
 | 
						|
        <label for="node-input-userid"><i class="fa fa-user"></i> <span data-i18n="email.label.userid"></span></label>
 | 
						|
        <input type="text" id="node-input-userid">
 | 
						|
    </div>
 | 
						|
    <div class="form-row node-input-password">
 | 
						|
        <label for="node-input-password"><i class="fa fa-lock"></i> <span data-i18n="email.label.password"></span></label>
 | 
						|
        <input type="password" id="node-input-password">
 | 
						|
    </div>
 | 
						|
 | 
						|
    <div class="form-row node-input-saslformat" style="display: none;">
 | 
						|
        <label for="node-input-saslformat"><i class="fa fa-code"></i> <span data-i18n="email.label.saslformat"></span></label>
 | 
						|
        <input type="checkbox" id="node-input-saslformat" style="width: auto;">
 | 
						|
    </div>
 | 
						|
    <div class="form-row node-input-token" style="display: none;">
 | 
						|
        <label for="node-input-token"><i class="fa fa-lock"></i> <span data-i18n="email.label.token"></span></label>
 | 
						|
        <input type="text" id="node-input-token" placeholder="oauth2Response.access_token">
 | 
						|
    </div>
 | 
						|
    <br/>
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-useTLS"><i class="fa fa-lock"></i> <span data-i18n="email.label.useTLS"></label>
 | 
						|
        <input type="checkbox" id="node-input-tls" style="display:inline-block; width:20px; vertical-align:baseline;">
 | 
						|
        <span data-i18n="email.label.rejectUnauthorised"></span>
 | 
						|
    </div>
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-dname"><i class="fa fa-tag"></i> <span data-i18n="node-red:common.label.name"></span></label>
 | 
						|
        <input type="text" id="node-input-dname" data-i18n="[placeholder]node-red:common.label.name">
 | 
						|
    </div>
 | 
						|
    <div class="form-tips" id="node-tip"><span data-i18n="[html]email.tip.cred"></span></div>
 | 
						|
    <script>
 | 
						|
        $("#node-input-authtype").change(function() {
 | 
						|
            var protocol = $("#node-input-authtype").val();
 | 
						|
            if (protocol === "BASIC") {
 | 
						|
                $(".node-input-password").show();
 | 
						|
                $(".node-input-saslformat").hide();
 | 
						|
                $(".node-input-token").hide();
 | 
						|
            } else {
 | 
						|
                $(".node-input-password").hide();
 | 
						|
                $(".node-input-saslformat").show();
 | 
						|
                $(".node-input-token").show();
 | 
						|
                $("#node-input-fetch").val("trigger");
 | 
						|
                $("#node-input-fetch").change();
 | 
						|
            }
 | 
						|
        });
 | 
						|
    </script>
 | 
						|
</script>
 | 
						|
 | 
						|
<script type="text/javascript">
 | 
						|
(function() {
 | 
						|
    RED.nodes.registerType('e-mail',{
 | 
						|
        category: 'social-output',
 | 
						|
        color:"#c7e9c0",
 | 
						|
        defaults: {
 | 
						|
            server: {value:"smtp.gmail.com",required:true},
 | 
						|
            port: {value:"465",required:true},
 | 
						|
            authtype: {value: "BASIC"},
 | 
						|
            saslformat: {value: true},
 | 
						|
            token: {value: "oauth2Response.access_token"},
 | 
						|
            secure: {value: true},
 | 
						|
            tls: {value: true},
 | 
						|
            name: {value:""},
 | 
						|
            dname: {value:""}
 | 
						|
        },
 | 
						|
        credentials: {
 | 
						|
            userid: {type:"text"},
 | 
						|
            password: {type: "password"},
 | 
						|
            global: { type:"boolean"}
 | 
						|
        },
 | 
						|
        inputs:1,
 | 
						|
        outputs:0,
 | 
						|
        icon: "envelope.png",
 | 
						|
        align: "right",
 | 
						|
        paletteLabel: function() {
 | 
						|
            return this._("email.email");
 | 
						|
        },
 | 
						|
        label: function() {
 | 
						|
            return this.dname||this.name||this._("email.email");
 | 
						|
        },
 | 
						|
        labelStyle: function() {
 | 
						|
            return (this.dname)?"node_label_italic":"";
 | 
						|
        },
 | 
						|
        oneditprepare: function() {
 | 
						|
            if (this.authtype === undefined) {
 | 
						|
                this.authtype = "BASIC";
 | 
						|
                $("#node-input-authtype").val('BASIC');
 | 
						|
            }
 | 
						|
            if (this.credentials.global) {
 | 
						|
                $('#node-tip').show();
 | 
						|
            } else {
 | 
						|
                $('#node-tip').hide();
 | 
						|
            }
 | 
						|
            $("#node-input-token").typedInput({
 | 
						|
                type:'msg',
 | 
						|
                types:['msg']
 | 
						|
            });
 | 
						|
        }
 | 
						|
    });
 | 
						|
})();
 | 
						|
</script>
 | 
						|
 | 
						|
 | 
						|
<script type="text/html" data-template-name="e-mail in">
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-fetch"><i class="fa fa-hourglass-half"></i> <span data-i18n="email.label.getmail"></span></label>
 | 
						|
        <select type="text" id="node-input-fetch" style="width:130px;">
 | 
						|
            <option value="auto" data-i18n="email.label.auto"></option>
 | 
						|
            <option value="trigger" data-i18n="email.label.trigger"></option>
 | 
						|
        </select>
 | 
						|
        <span id="node-repeatTime">
 | 
						|
            <span style="margin-left:20px;" data-i18n="email.label.repeat"></span>
 | 
						|
            <input type="text" id="node-input-repeat" style="width:80px"> <span data-i18n="email.label.seconds">seconds</span>
 | 
						|
        </span>
 | 
						|
    </div>
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-protocol"><i class="fa fa-envelope"></i> <span data-i18n="email.label.protocol"></span></label>
 | 
						|
        <select type="text" id="node-input-protocol">
 | 
						|
            <option value="IMAP">IMAP</option>
 | 
						|
            <option value="POP3">POP3</option>
 | 
						|
        </select>
 | 
						|
    </div>
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-useSSL"><i class="fa fa-lock"></i> <span data-i18n="email.label.useSSL"></span></label>
 | 
						|
        <input type="checkbox" id="node-input-useSSL" style="width: auto;">
 | 
						|
    </div>
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-autotls"><i class="fa fa-lock"></i> <span data-i18n="email.label.autotls"></label>
 | 
						|
        <select type="text" id="node-input-autotls" style="width: 150px;">
 | 
						|
            <option value="never" data-i18n="email.label.never"></option>
 | 
						|
            <option value="required" data-i18n="email.label.required"></option>
 | 
						|
            <option value="always" data-i18n="email.label.always"></option>
 | 
						|
        </select>
 | 
						|
    </div>
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-server"><i class="fa fa-globe"></i> <span data-i18n="email.label.server"></span></label>
 | 
						|
        <input type="text" id="node-input-server" placeholder="imap.gmail.com">
 | 
						|
    </div>
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-port"><i class="fa fa-random"></i> <span data-i18n="email.label.port"></span></label>
 | 
						|
        <input type="text" id="node-input-port" placeholder="993">
 | 
						|
    </div>
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-authtype"><i class="fa fa-tasks"></i> <span data-i18n="email.label.authtype"></span></label>
 | 
						|
        <select type="text" id="node-input-authtype">
 | 
						|
            <option value="BASIC">Basic</option>
 | 
						|
            <option value="XOAUTH2">XOAuth2</option>
 | 
						|
        </select>
 | 
						|
    </div>
 | 
						|
    <div class="form-row node-input-userid">
 | 
						|
        <label for="node-input-userid"><i class="fa fa-user"></i> <span data-i18n="email.label.userid"></span></label>
 | 
						|
        <input type="text" id="node-input-userid">
 | 
						|
    </div>
 | 
						|
    <div class="form-row node-input-password">
 | 
						|
        <label for="node-input-password"><i class="fa fa-lock"></i> <span data-i18n="email.label.password"></span></label>
 | 
						|
        <input type="password" id="node-input-password">
 | 
						|
    </div>
 | 
						|
    <div class="form-row node-input-saslformat" style="display: none;">
 | 
						|
        <label for="node-input-saslformat"><i class="fa fa-code"></i> <span data-i18n="email.label.saslformat"></span></label>
 | 
						|
        <input type="checkbox" id="node-input-saslformat" style="width: auto;">
 | 
						|
    </div>
 | 
						|
    <div class="form-row node-input-token" style="display: none;">
 | 
						|
        <label for="node-input-token"><i class="fa fa-lock"></i> <span data-i18n="email.label.token"></span></label>
 | 
						|
        <input type="text" id="node-input-token" placeholder="oauth2Response.access_token">
 | 
						|
    </div>
 | 
						|
    <div class="form-row node-input-box">
 | 
						|
        <label for="node-input-box"><i class="fa fa-inbox"></i> <span data-i18n="email.label.folder"></span></label>
 | 
						|
        <input type="text" id="node-input-box">
 | 
						|
    </div>
 | 
						|
    <div class="form-row node-input-disposition">
 | 
						|
            <label for="node-input-disposition"><i class="fa fa-trash"></i> <span data-i18n="email.label.disposition"></span></label>
 | 
						|
        <select type="text" id="node-input-disposition">
 | 
						|
            <option value="None" selected="selected" data-i18n="email.label.none"></option>
 | 
						|
            <option value="Read" data-i18n="email.label.read"></option>
 | 
						|
            <option value="Delete" data-i18n="email.label.delete"></option>
 | 
						|
        </select>
 | 
						|
    </div>
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-criteria"><i class="fa fa-search"></i> <span data-i18n="email.label.criteria"></span></label>
 | 
						|
        <select type="text" id="node-input-criteria">
 | 
						|
            <option value="ALL" data-i18n="email.label.all"></option>
 | 
						|
            <option value="ANSWERED" data-i18n="email.label.answered"></option>
 | 
						|
            <option value="FLAGGED" data-i18n="email.label.flagged"></option>
 | 
						|
            <option value="SEEN" data-i18n="email.label.seen"></option>
 | 
						|
            <option value="UNANSWERED" data-i18n="email.label.unanswered"></option>
 | 
						|
            <option value="UNFLAGGED" data-i18n="email.label.unflagged"></option>
 | 
						|
            <option value="UNSEEN" selected="selected" data-i18n="email.label.unseen"></option>
 | 
						|
            <option value="_msg_" data-i18n="email.label.criteriaFromMsg"></option>
 | 
						|
            <!--
 | 
						|
            <option value="DELETED" data-i18n="email.label.delete"></option>
 | 
						|
            <option value="DRAFT" data-i18n="email.label.none"></option>
 | 
						|
            <option value="NEW" data-i18n="email.label.delete"></option>
 | 
						|
            <option value="UNDELETED" data-i18n="email.label.read"></option>
 | 
						|
            <option value="UNDRAFT" data-i18n="email.label.delete"></option>
 | 
						|
            <option value="RECENT" data-i18n="email.label.read"></option>
 | 
						|
            <option value="OLD" data-i18n="email.label.delete"></option>
 | 
						|
            -->
 | 
						|
        </select>
 | 
						|
    </div>
 | 
						|
    <br/>
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="node-red:common.label.name"></span></label>
 | 
						|
        <input type="text" id="node-input-name" data-i18n="[placeholder]node-red:common.label.name">
 | 
						|
    </div>
 | 
						|
    <script>
 | 
						|
        var checkPorts = function() {
 | 
						|
            var currentPort = $("#node-input-port").val();
 | 
						|
            if (currentPort === "143" || currentPort === "993" || currentPort === "110" || currentPort == "995") {
 | 
						|
                if ($("#node-input-useSSL").prop("checked") === true) {
 | 
						|
                    $("#node-input-port").val($("#node-input-protocol").val() === "IMAP"?"993":"995");
 | 
						|
                } else {
 | 
						|
                    $("#node-input-port").val($("#node-input-protocol").val() === "IMAP"?"143":"110");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        };
 | 
						|
 | 
						|
        $("#node-input-useSSL").change(function(x, y) {
 | 
						|
          // console.log("useSSL: x="+ JSON.stringify(x) + ", y=" + y);
 | 
						|
          // console.log("Value: " + $("#node-input-useSSL").prop("checked"));
 | 
						|
          checkPorts();
 | 
						|
        });
 | 
						|
 | 
						|
        $("#node-input-protocol").change(function() {
 | 
						|
            var protocol = $("#node-input-protocol").val();
 | 
						|
            if (protocol === "IMAP") {
 | 
						|
                $(".node-input-autotls").show();
 | 
						|
                $(".node-input-box").show();
 | 
						|
                $(".node-input-disposition").show();
 | 
						|
                $(".node-input-criteria").show();
 | 
						|
            } else {
 | 
						|
                $(".node-input-autotls").hide();
 | 
						|
                $(".node-input-box").hide();
 | 
						|
                $(".node-input-disposition").hide();
 | 
						|
                $(".node-input-criteria").hide();
 | 
						|
            }
 | 
						|
            checkPorts();
 | 
						|
        });
 | 
						|
 | 
						|
        $("#node-input-authtype").change(function() {
 | 
						|
            var protocol = $("#node-input-authtype").val();
 | 
						|
            if (protocol === "BASIC") {
 | 
						|
                $(".node-input-password").show();
 | 
						|
                $(".node-input-saslformat").hide();
 | 
						|
                $(".node-input-token").hide();
 | 
						|
            } else {
 | 
						|
                $(".node-input-password").hide();
 | 
						|
                $(".node-input-saslformat").show();
 | 
						|
                $(".node-input-token").show();
 | 
						|
                $("#node-input-fetch").val("trigger");
 | 
						|
                $("#node-input-fetch").change();
 | 
						|
            }
 | 
						|
        });
 | 
						|
    </script>
 | 
						|
</script>
 | 
						|
 | 
						|
<script type="text/javascript">
 | 
						|
(function() {
 | 
						|
    RED.nodes.registerType('e-mail in',{
 | 
						|
        category: 'social-input',
 | 
						|
        color:"#c7e9c0",
 | 
						|
        defaults: {
 | 
						|
            name: {value:""},
 | 
						|
            protocol: {value: "IMAP", required:true}, // Which protocol to use to connect to the mail server ("IMAP" or "POP3")
 | 
						|
            server: {value:"imap.gmail.com",required:true},
 | 
						|
            useSSL: {value: true},
 | 
						|
            autotls: {value: "never"},
 | 
						|
            port: {value:"993",required:true},
 | 
						|
            authtype: {value: "BASIC"},
 | 
						|
            saslformat: {value: true},
 | 
						|
            token: {value: "oauth2Response.access_token"},
 | 
						|
            box: {value:"INBOX"}, // For IMAP, The mailbox to process
 | 
						|
            disposition: { value: "Read" }, // For IMAP, the disposition of the read email
 | 
						|
	        criteria: {value: "UNSEEN"},
 | 
						|
            repeat: {value:"300",required:true},
 | 
						|
            fetch: {value:"auto"},
 | 
						|
            inputs: {value:0}
 | 
						|
        },
 | 
						|
        credentials: {
 | 
						|
            userid: {type:"text"},
 | 
						|
            password: {type: "password"},
 | 
						|
            global: { type:"boolean"}
 | 
						|
        },
 | 
						|
        inputs: 0,
 | 
						|
        outputs: 1,
 | 
						|
        icon: "envelope.png",
 | 
						|
        paletteLabel: function() {
 | 
						|
            return this._("email.email");
 | 
						|
        },
 | 
						|
        label: function() {
 | 
						|
            return this.name||this._("email.email");
 | 
						|
        },
 | 
						|
        labelStyle: function() {
 | 
						|
            return (this.name)?"node_label_italic":"";
 | 
						|
        },
 | 
						|
        oneditprepare: function() {
 | 
						|
            var that = this;
 | 
						|
            if (this.authtype === undefined) {
 | 
						|
                this.authtype = "BASIC";
 | 
						|
                $("#node-input-authtype").val('BASIC');
 | 
						|
            }
 | 
						|
            if (this.credentials.global) {
 | 
						|
                $('#node-tip').show();
 | 
						|
            } else {
 | 
						|
                $('#node-tip').hide();
 | 
						|
            }
 | 
						|
            if (typeof this.box === 'undefined') {
 | 
						|
                $("#node-input-box").val("INBOX");
 | 
						|
                this.box = "INBOX";
 | 
						|
            }
 | 
						|
            if (typeof this.criteria === 'undefined') {
 | 
						|
                $("#node-input-criteria").val("UNSEEN");
 | 
						|
                this.criteria = "UNSEEN";
 | 
						|
            }
 | 
						|
            if (typeof this.autotls === 'undefined') {
 | 
						|
                $("#node-input-autotls").val("never");
 | 
						|
                this.autotls = "never";
 | 
						|
            }
 | 
						|
            if ($("#node-input-fetch").val() === null) { $("#node-input-fetch").val("auto"); }
 | 
						|
            $("#node-input-fetch").change(function() {
 | 
						|
                if ($("#node-input-fetch").val() === "trigger") {
 | 
						|
                    $('#node-repeatTime').hide();
 | 
						|
                    that.inputs = 1;
 | 
						|
                }
 | 
						|
                else  {
 | 
						|
                    $('#node-repeatTime').show();
 | 
						|
                    that.inputs = 0;
 | 
						|
                    $("#node-input-authtype").val("BASIC");
 | 
						|
                    $("#node-input-authtype").change();
 | 
						|
                }
 | 
						|
            });
 | 
						|
            $("#node-input-criteria").change(function() {
 | 
						|
                if ($("#node-input-criteria").val() === "_msg_") {
 | 
						|
                    $("#node-input-fetch").val("trigger");
 | 
						|
                    $("#node-input-fetch").change();
 | 
						|
                }
 | 
						|
            });
 | 
						|
            $("#node-input-token").typedInput({
 | 
						|
                type:'msg',
 | 
						|
                types:['msg']
 | 
						|
            });
 | 
						|
        }
 | 
						|
    });
 | 
						|
})();
 | 
						|
</script>
 | 
						|
 | 
						|
 | 
						|
<script type="text/html" data-template-name="e-mail mta">
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-port"><i class="fa fa-random"></i> <span data-i18n="email.label.port"></span></label>
 | 
						|
        <input type="text" id="node-input-port" style="width:100px">
 | 
						|
        <label style="width:40px"> </label>
 | 
						|
        <input type="checkbox" id="node-input-secure" style="display:inline-block; width:20px; vertical-align:baseline;">
 | 
						|
        <span data-i18n="email.label.enableSecure"></span>
 | 
						|
    </div>
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-starttls"><i class="fa fa-lock"></i> <span data-i18n="email.label.enableStarttls"></span></label>
 | 
						|
        <input type="checkbox" id="node-input-starttls" style="display:inline-block; width:20px; vertical-align:baseline;">
 | 
						|
        <span data-i18n="email.label.starttlsUpgrade"></span>
 | 
						|
    </div>
 | 
						|
    <div class="form-row" id="certRow">
 | 
						|
        <label for="node-input-certFile"><i class="fa fa-file"></i>
 | 
						|
        <span data-i18n="email.label.certFile"></span></label>
 | 
						|
        <input type="text" id="node-input-certFile" placeholder="server.crt" style="width:100%">
 | 
						|
    </div>
 | 
						|
    <div class="form-row" id="keyRow">
 | 
						|
        <label for="node-input-keyFile"><i class="fa fa-key"></i>
 | 
						|
        <span data-i18n="email.label.keyFile"></span></label>
 | 
						|
        <input type="text" id="node-input-keyFile" placeholder="private.key" style="width:100%">
 | 
						|
    </div>
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-auth"><i class="fa fa-user"></i> <span data-i18n="email.label.users"></span></label>
 | 
						|
        <input type="checkbox" id="node-input-auth" style="display:inline-block; width:20px; vertical-align:baseline;">
 | 
						|
        <span data-i18n="email.label.auth"></span>
 | 
						|
    </div>
 | 
						|
    <div class="form-row node-input-email-users-container-row" style="margin-bottom: 0px;">
 | 
						|
        <div id="node-input-email-users-container-div" style="box-sizing: border-box; border-radius: 5px;
 | 
						|
                height: 200px; padding: 5px; border: 1px solid #ccc; overflow-y:scroll;">
 | 
						|
            <ol id="node-input-email-users-container" style="list-style-type:none; margin: 0;"></ol>
 | 
						|
        </div>
 | 
						|
    </div>
 | 
						|
    <div class="form-row">
 | 
						|
        <a href="#" class="editor-button editor-button-small" id="node-input-email-users-add" style="margin-top: 4px;">
 | 
						|
            <i class="fa fa-plus"></i>
 | 
						|
            <span data-i18n="email.label.addButton"></span>
 | 
						|
        </a>
 | 
						|
    </div>
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-expert"><i class="fa fa-cog"></i> <span data-i18n="email.label.expert"></span></label>
 | 
						|
        <input type="text" id="node-input-expert">
 | 
						|
    </div>
 | 
						|
    <div class="form-row">
 | 
						|
        <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="node-red:common.label.name"></span></label>
 | 
						|
        <input type="text" id="node-input-name" data-i18n="[placeholder]node-red:common.label.name">
 | 
						|
    </div>
 | 
						|
    <div class="form-tips" id="node-tip"><span data-i18n="[html]email.tip.mta"></span></div>
 | 
						|
</script>
 | 
						|
 | 
						|
<script type="text/javascript">
 | 
						|
    RED.nodes.registerType('e-mail mta', {
 | 
						|
        category: 'social',
 | 
						|
        color: "#c7e9c0",
 | 
						|
        defaults: {
 | 
						|
            name: { value: "" },
 | 
						|
            port: { value: "1025", required: true, validate: RED.validators.number() },
 | 
						|
            secure: { value: false },
 | 
						|
            starttls: { value: false },
 | 
						|
            certFile: { value: "" },
 | 
						|
            keyFile: { value: "" },
 | 
						|
            users: { value: [] },
 | 
						|
            auth: { value: false },
 | 
						|
            expert: { value: '{"logger":false}' }
 | 
						|
        },
 | 
						|
        inputs: 0,
 | 
						|
        outputs: 1,
 | 
						|
        icon: "envelope.png",
 | 
						|
        paletteLabel: function () { return this._("email.email") + " MTA" },
 | 
						|
        label: function () {
 | 
						|
            return this.name || this._("email.email") + " MTA";
 | 
						|
        },
 | 
						|
        labelStyle: function () {
 | 
						|
            return this.name ? "node_label_italic" : "";
 | 
						|
        },
 | 
						|
        oneditprepare: function () {
 | 
						|
            let node = this;
 | 
						|
            // Certificate settings
 | 
						|
            $("#node-input-secure").change(secVisibility);
 | 
						|
            $("#node-input-starttls").change(secVisibility);
 | 
						|
            function secVisibility() {
 | 
						|
                if ($("#node-input-secure").is(":checked") || $("#node-input-starttls").is(":checked")) {
 | 
						|
                    $("#certRow").show();
 | 
						|
                    $("#keyRow").show();
 | 
						|
                } else {
 | 
						|
                    $("#certRow").hide();
 | 
						|
                    $("#keyRow").hide();
 | 
						|
                }
 | 
						|
            }
 | 
						|
            // User Management
 | 
						|
            let cacheItemCount = 0;
 | 
						|
            if (node.users && node.users.length > 0) {
 | 
						|
                cacheItemCount = node.users.length;
 | 
						|
                node.users.forEach(function (element, index, array) {
 | 
						|
                    generateUserEntry(element, index);
 | 
						|
                });
 | 
						|
            }
 | 
						|
            function generateUserEntry(user, id) {
 | 
						|
                let container = $("<li/>", {
 | 
						|
                    style: "background: #fefefe; margin:0; padding:8px 0px; border-bottom: 1px solid #ccc;"
 | 
						|
                });
 | 
						|
                let row = $('<div id="row' + id + '"/>').appendTo(container);
 | 
						|
 | 
						|
                $('<i style="color: #eee; cursor: move;" class="node-input-email-users-handle fa fa-bars"></i>').appendTo(row);
 | 
						|
 | 
						|
                let userField = $("<input/>", {
 | 
						|
                    id: "node-input-email-users-name" + id,
 | 
						|
                    class: "userName",
 | 
						|
                    type: "text",
 | 
						|
                    style: "margin-left:5px;width:100px;",
 | 
						|
                    placeholder: "name"
 | 
						|
                }).appendTo(row);
 | 
						|
 | 
						|
                let passwordField = $("<input/>", {
 | 
						|
                    id: "node-input-email-users-password" + id,
 | 
						|
                    class: "userPassword",
 | 
						|
                    type: "password",
 | 
						|
                    style: "margin: 0 auto;width:50%;min-width:20px;margin-left:5px",
 | 
						|
                    placeholder: "password"
 | 
						|
                }).appendTo(row);
 | 
						|
 | 
						|
                userField.val(user.name);
 | 
						|
                passwordField.val(user.password);
 | 
						|
 | 
						|
                let finalspan = $("<span/>", {
 | 
						|
                    style: "float: right;margin-right: 10px;"
 | 
						|
                }).appendTo(row);
 | 
						|
 | 
						|
                let removeUserButton = $("<a/>", {
 | 
						|
                    href: "#",
 | 
						|
                    id: "node-button-user-remove" + id,
 | 
						|
                    class: "editor-button editor-button-small",
 | 
						|
                    style: "margin-top: 7px; margin-left: 5px;"
 | 
						|
                }).appendTo(finalspan);
 | 
						|
 | 
						|
                $("<i/>", { class: "fa fa-remove" }).appendTo(removeUserButton);
 | 
						|
 | 
						|
                removeUserButton.click(function () {
 | 
						|
                    container.css({ background: "#fee" });
 | 
						|
                    container.fadeOut(300, function () {
 | 
						|
                        $(this).remove();
 | 
						|
                    });
 | 
						|
                });
 | 
						|
 | 
						|
                $("#node-input-email-users-container").append(container);
 | 
						|
            }
 | 
						|
 | 
						|
            $("#node-input-email-users-container").sortable({
 | 
						|
                axis: "y",
 | 
						|
                handle: ".node-input-email-users-handle",
 | 
						|
                cursor: "move"
 | 
						|
            });
 | 
						|
 | 
						|
            $("#node-input-email-users-container .node-input-email-users-handle").disableSelection();
 | 
						|
 | 
						|
            $("#node-input-email-users-add").click(function () {
 | 
						|
                if (!cacheItemCount || cacheItemCount < 0) {
 | 
						|
                    cacheItemCount = 0;
 | 
						|
                }
 | 
						|
                generateUserEntry({ name: "", password: "" }, cacheItemCount++);
 | 
						|
                $("#node-input-email-users-container-div").scrollTop(
 | 
						|
                    $("#node-input-email-users-container-div").get(0).scrollHeight
 | 
						|
                );
 | 
						|
            });
 | 
						|
            $("#node-input-auth").change(function () {
 | 
						|
                if ($("#node-input-auth").is(":checked")) {
 | 
						|
                    $("#node-input-email-users-add").show();
 | 
						|
                    $("#node-input-email-users-container-div").show();
 | 
						|
                } else {
 | 
						|
                    $("#node-input-email-users-add").hide();
 | 
						|
                    $("#node-input-email-users-container-div").hide();
 | 
						|
                }
 | 
						|
            });
 | 
						|
            // Expert settings
 | 
						|
            $("#node-input-expert").typedInput({
 | 
						|
                type: "json",
 | 
						|
                types: ["json"]
 | 
						|
            })
 | 
						|
        },
 | 
						|
        oneditsave: function () {
 | 
						|
            let node = this;
 | 
						|
            let cacheUsers = $("#node-input-email-users-container").children();
 | 
						|
            node.users = [];
 | 
						|
            cacheUsers.each(function () {
 | 
						|
                node.users.push({
 | 
						|
                    name: $(this)
 | 
						|
                        .find(".userName")
 | 
						|
                        .val(),
 | 
						|
                    password: $(this)
 | 
						|
                        .find(".userPassword")
 | 
						|
                        .val()
 | 
						|
                });
 | 
						|
            });
 | 
						|
        }
 | 
						|
    });
 | 
						|
</script> |