146 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			146 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!--
 | 
						|
 | 
						|
    Copyright © 2016-2020 The Thingsboard Authors
 | 
						|
 | 
						|
    Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
    you may not use this file except in compliance with the License.
 | 
						|
    You may obtain a copy of the License at
 | 
						|
 | 
						|
        http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 | 
						|
    Unless required by applicable law or agreed to in writing, software
 | 
						|
    distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
    See the License for the specific language governing permissions and
 | 
						|
    limitations under the License.
 | 
						|
 | 
						|
-->
 | 
						|
<div>
 | 
						|
  <mat-card class="settings-card">
 | 
						|
    <mat-card-title>
 | 
						|
      <div fxLayout="row">
 | 
						|
        <span class="mat-headline" translate>admin.outgoing-mail-settings</span>
 | 
						|
        <span fxFlex></span>
 | 
						|
        <div tb-help="outgoingMailSettings"></div>
 | 
						|
      </div>
 | 
						|
    </mat-card-title>
 | 
						|
    <mat-progress-bar color="warn" mode="indeterminate" *ngIf="isLoading$ | async">
 | 
						|
    </mat-progress-bar>
 | 
						|
    <div style="height: 4px;" *ngIf="!(isLoading$ | async)"></div>
 | 
						|
    <mat-card-content style="padding-top: 16px;">
 | 
						|
      <form [formGroup]="mailSettings" (ngSubmit)="save()">
 | 
						|
        <fieldset [disabled]="isLoading$ | async">
 | 
						|
          <mat-form-field class="mat-block">
 | 
						|
            <mat-label translate>admin.mail-from</mat-label>
 | 
						|
            <input matInput formControlName="mailFrom" required/>
 | 
						|
            <mat-error *ngIf="mailSettings.get('mailFrom').hasError('required')">
 | 
						|
              {{ 'admin.mail-from-required' | translate }}
 | 
						|
            </mat-error>
 | 
						|
          </mat-form-field>
 | 
						|
          <mat-form-field class="mat-block">
 | 
						|
            <mat-label translate>admin.smtp-protocol</mat-label>
 | 
						|
            <mat-select matInput formControlName="smtpProtocol">
 | 
						|
              <mat-option *ngFor="let protocol of smtpProtocols" [value]="protocol">
 | 
						|
                {{protocol.toUpperCase()}}
 | 
						|
              </mat-option>
 | 
						|
            </mat-select>
 | 
						|
          </mat-form-field>
 | 
						|
          <div fxLayout.gt-sm="row" fxLayoutGap.gt-sm="10px">
 | 
						|
            <mat-form-field class="mat-block" fxFlex="100" fxFlex.gt-sm="60">
 | 
						|
              <mat-label translate>admin.smtp-host</mat-label>
 | 
						|
              <input matInput formControlName="smtpHost" placeholder="localhost" required/>
 | 
						|
              <mat-error *ngIf="mailSettings.get('smtpHost').hasError('required')">
 | 
						|
                {{ 'admin.smtp-host-required' | translate }}
 | 
						|
              </mat-error>
 | 
						|
            </mat-form-field>
 | 
						|
            <mat-form-field class="mat-block" fxFlex="100" fxFlex.gt-sm="40">
 | 
						|
              <mat-label translate>admin.smtp-port</mat-label>
 | 
						|
              <input matInput #smtpPortInput formControlName="smtpPort" placeholder="25" maxlength="5" required/>
 | 
						|
              <mat-hint align="end">{{smtpPortInput.value?.length || 0}}/5</mat-hint>
 | 
						|
              <mat-error *ngIf="mailSettings.get('smtpPort').hasError('required')">
 | 
						|
                {{ 'admin.smtp-port-required' | translate }}
 | 
						|
              </mat-error>
 | 
						|
              <mat-error *ngIf="mailSettings.get('smtpPort').hasError('pattern') || mailSettings.get('smtpPort').hasError('maxlength')">
 | 
						|
                {{ 'admin.smtp-port-invalid' | translate }}
 | 
						|
              </mat-error>
 | 
						|
            </mat-form-field>
 | 
						|
          </div>
 | 
						|
          <mat-form-field class="mat-block">
 | 
						|
            <mat-label translate>admin.timeout-msec</mat-label>
 | 
						|
            <input matInput #timeoutInput formControlName="timeout" placeholder="10000" maxlength="6" required/>
 | 
						|
            <mat-hint align="end">{{timeoutInput.value?.length || 0}}/6</mat-hint>
 | 
						|
            <mat-error *ngIf="mailSettings.get('timeout').hasError('required')">
 | 
						|
              {{ 'admin.timeout-required' | translate }}
 | 
						|
            </mat-error>
 | 
						|
            <mat-error *ngIf="mailSettings.get('timeout').hasError('pattern') || mailSettings.get('timeout').hasError('maxlength')">
 | 
						|
              {{ 'admin.timeout-invalid' | translate }}
 | 
						|
            </mat-error>
 | 
						|
          </mat-form-field>
 | 
						|
          <tb-checkbox formControlName="enableTls" trueValue="true" falseValue="false" style="display: block; padding-bottom: 16px;">
 | 
						|
            {{ 'admin.enable-tls' | translate }}
 | 
						|
          </tb-checkbox>
 | 
						|
          <mat-form-field class="mat-block" *ngIf="mailSettings.get('enableTls').value === 'true'">
 | 
						|
            <mat-label translate>admin.tls-version</mat-label>
 | 
						|
            <mat-select formControlName="tlsVersion">
 | 
						|
              <mat-option *ngFor="let tlsVersion of tlsVersions" [value]="tlsVersion">
 | 
						|
                {{ tlsVersion }}
 | 
						|
              </mat-option>
 | 
						|
            </mat-select>
 | 
						|
          </mat-form-field>
 | 
						|
          <tb-checkbox formControlName="enableProxy" style="display: block; padding-bottom: 16px;">
 | 
						|
            {{ 'admin.enable-proxy' | translate }}
 | 
						|
          </tb-checkbox>
 | 
						|
          <div *ngIf="enableProxy()">
 | 
						|
            <div fxLayout.gt-sm="row">
 | 
						|
              <mat-form-field class="mat-block" fxFlex="100" fxFlex.gt-sm="60">
 | 
						|
                <mat-label translate>admin.proxy-host</mat-label>
 | 
						|
                <input matInput required formControlName="proxyHost">
 | 
						|
                <mat-error *ngIf="mailSettings.get('proxyHost').hasError('required')">
 | 
						|
                  {{ 'admin.proxy-host-required' | translate }}
 | 
						|
                </mat-error>
 | 
						|
              </mat-form-field>
 | 
						|
              <mat-form-field class="mat-block" fxFlex="100" fxFlex.gt-sm="40">
 | 
						|
                <mat-label translate>admin.proxy-port</mat-label>
 | 
						|
                <input matInput required formControlName="proxyPort" type="number" step="1" min="1" max="65535">
 | 
						|
                <mat-error *ngIf="mailSettings.get('proxyPort').hasError('required')">
 | 
						|
                  {{ 'admin.proxy-port-required' | translate }}
 | 
						|
                </mat-error>
 | 
						|
                <mat-error *ngIf="mailSettings.get('proxyPort').hasError('pattern')
 | 
						|
              || mailSettings.get('proxyPort').hasError('min')
 | 
						|
              || mailSettings.get('proxyPort').hasError('max')">
 | 
						|
                  {{ 'admin.proxy-port-range' | translate }}
 | 
						|
                </mat-error>
 | 
						|
              </mat-form-field>
 | 
						|
            </div>
 | 
						|
            <mat-form-field class="mat-block">
 | 
						|
              <mat-label translate>admin.proxy-user</mat-label>
 | 
						|
              <input matInput formControlName="proxyUser">
 | 
						|
            </mat-form-field>
 | 
						|
            <mat-form-field class="mat-block">
 | 
						|
              <mat-label translate>admin.proxy-password</mat-label>
 | 
						|
              <input matInput formControlName="proxyPassword">
 | 
						|
            </mat-form-field>
 | 
						|
          </div>
 | 
						|
          <mat-form-field class="mat-block">
 | 
						|
            <mat-label translate>common.username</mat-label>
 | 
						|
            <input matInput formControlName="username" placeholder="{{ 'common.enter-username' | translate }}"/>
 | 
						|
          </mat-form-field>
 | 
						|
          <mat-form-field class="mat-block">
 | 
						|
            <mat-label translate>common.password</mat-label>
 | 
						|
            <input matInput formControlName="password" type="password" placeholder="{{ 'common.enter-password' | translate }}"/>
 | 
						|
          </mat-form-field>
 | 
						|
          <div fxLayout="row" fxLayoutAlign="end center" fxLayout.xs="column" fxLayoutAlign.xs="end" fxLayoutGap="16px">
 | 
						|
            <button mat-raised-button type="button"
 | 
						|
                    [disabled]="(isLoading$ | async) || mailSettings.invalid" (click)="sendTestMail()">
 | 
						|
              {{'admin.send-test-mail' | translate}}
 | 
						|
            </button>
 | 
						|
            <button mat-raised-button color="primary" [disabled]="(isLoading$ | async) || mailSettings.invalid || !mailSettings.dirty"
 | 
						|
                    type="submit">{{'action.save' | translate}}
 | 
						|
            </button>
 | 
						|
          </div>
 | 
						|
        </fieldset>
 | 
						|
      </form>
 | 
						|
    </mat-card-content>
 | 
						|
  </mat-card>
 | 
						|
</div>
 |