Merge branch 'test-smtp'
This commit is contained in:
commit
278d5bf74e
27 changed files with 240 additions and 17 deletions
|
@ -68,6 +68,7 @@ func initHTTPHandlers(e *echo.Echo, app *App) {
|
||||||
|
|
||||||
g.GET("/api/settings", handleGetSettings)
|
g.GET("/api/settings", handleGetSettings)
|
||||||
g.PUT("/api/settings", handleUpdateSettings)
|
g.PUT("/api/settings", handleUpdateSettings)
|
||||||
|
g.POST("/api/settings/smtp/test", handleTestSMTPSettings)
|
||||||
g.POST("/api/admin/reload", handleReloadApp)
|
g.POST("/api/admin/reload", handleReloadApp)
|
||||||
g.GET("/api/logs", handleGetLogs)
|
g.GET("/api/logs", handleGetLogs)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -8,6 +10,11 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gofrs/uuid"
|
"github.com/gofrs/uuid"
|
||||||
|
"github.com/knadh/koanf"
|
||||||
|
"github.com/knadh/koanf/parsers/json"
|
||||||
|
"github.com/knadh/koanf/providers/rawbytes"
|
||||||
|
"github.com/knadh/listmonk/internal/messenger"
|
||||||
|
"github.com/knadh/listmonk/internal/messenger/email"
|
||||||
"github.com/knadh/listmonk/models"
|
"github.com/knadh/listmonk/models"
|
||||||
"github.com/labstack/echo/v4"
|
"github.com/labstack/echo/v4"
|
||||||
)
|
)
|
||||||
|
@ -193,3 +200,62 @@ func handleGetLogs(c echo.Context) error {
|
||||||
app := c.Get("app").(*App)
|
app := c.Get("app").(*App)
|
||||||
return c.JSON(http.StatusOK, okResp{app.bufLog.Lines()})
|
return c.JSON(http.StatusOK, okResp{app.bufLog.Lines()})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// handleTestSMTPSettings returns the log entries stored in the log buffer.
|
||||||
|
func handleTestSMTPSettings(c echo.Context) error {
|
||||||
|
app := c.Get("app").(*App)
|
||||||
|
|
||||||
|
// Copy the raw JSON post body.
|
||||||
|
reqBody, err := ioutil.ReadAll(c.Request().Body)
|
||||||
|
if err != nil {
|
||||||
|
app.log.Printf("error reading SMTP test: %v", err)
|
||||||
|
return echo.NewHTTPError(http.StatusBadRequest, app.i18n.Ts("globals.messages.internalError"))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load the JSON into koanf to parse SMTP settings properly including timestrings.
|
||||||
|
ko := koanf.New(".")
|
||||||
|
if err := ko.Load(rawbytes.Provider(reqBody), json.Parser()); err != nil {
|
||||||
|
app.log.Printf("error unmarshalling SMTP test request: %v", err)
|
||||||
|
return echo.NewHTTPError(http.StatusBadRequest, app.i18n.Ts("globals.messages.internalError"))
|
||||||
|
}
|
||||||
|
|
||||||
|
req := email.Server{}
|
||||||
|
if err := ko.UnmarshalWithConf("", &req, koanf.UnmarshalConf{Tag: "json"}); err != nil {
|
||||||
|
app.log.Printf("error scanning SMTP test request: %v", err)
|
||||||
|
return echo.NewHTTPError(http.StatusBadRequest, app.i18n.Ts("globals.messages.internalError"))
|
||||||
|
}
|
||||||
|
|
||||||
|
to := ko.String("email")
|
||||||
|
if to == "" {
|
||||||
|
return echo.NewHTTPError(http.StatusBadRequest, app.i18n.Ts("globals.messages.missingFields", "name", "email"))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize a new SMTP pool.
|
||||||
|
req.MaxConns = 1
|
||||||
|
req.IdleTimeout = time.Second * 2
|
||||||
|
req.PoolWaitTimeout = time.Second * 2
|
||||||
|
msgr, err := email.New(req)
|
||||||
|
if err != nil {
|
||||||
|
return echo.NewHTTPError(http.StatusBadRequest,
|
||||||
|
app.i18n.Ts("globals.messages.errorCreating", "name", "SMTP", "error", err.Error()))
|
||||||
|
}
|
||||||
|
|
||||||
|
var b bytes.Buffer
|
||||||
|
if err := app.notifTpls.tpls.ExecuteTemplate(&b, "smtp-test", nil); err != nil {
|
||||||
|
app.log.Printf("error compiling notification template '%s': %v", "smtp-test", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
m := messenger.Message{}
|
||||||
|
m.ContentType = app.notifTpls.contentType
|
||||||
|
m.From = app.constants.FromEmail
|
||||||
|
m.To = []string{to}
|
||||||
|
m.Subject = app.i18n.T("settings.smtp.testConnection")
|
||||||
|
m.Body = b.Bytes()
|
||||||
|
if err := msgr.Push(m); err != nil {
|
||||||
|
app.log.Printf("error sending SMTP test (%s): %v", m.Subject, err)
|
||||||
|
return echo.NewHTTPError(http.StatusInternalServerError, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.JSON(http.StatusOK, okResp{app.bufLog.Lines()})
|
||||||
|
}
|
||||||
|
|
|
@ -277,6 +277,9 @@ export const getSettings = async () => http.get('/api/settings',
|
||||||
export const updateSettings = async (data) => http.put('/api/settings', data,
|
export const updateSettings = async (data) => http.put('/api/settings', data,
|
||||||
{ loading: models.settings });
|
{ loading: models.settings });
|
||||||
|
|
||||||
|
export const testSMTP = async (data) => http.post('/api/settings/smtp/test', data,
|
||||||
|
{ loading: models.settings, disableToast: true });
|
||||||
|
|
||||||
export const getLogs = async () => http.get('/api/logs',
|
export const getLogs = async () => http.get('/api/logs',
|
||||||
{ loading: models.logs, camelCase: false });
|
{ loading: models.logs, camelCase: false });
|
||||||
|
|
||||||
|
|
|
@ -141,12 +141,14 @@ export default class Utils {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
prompt = (msg, inputAttrs, onConfirm, onCancel) => {
|
prompt = (msg, inputAttrs, onConfirm, onCancel, params) => {
|
||||||
|
const p = params || {};
|
||||||
|
|
||||||
Dialog.prompt({
|
Dialog.prompt({
|
||||||
scroll: 'keep',
|
scroll: 'keep',
|
||||||
message: this.escapeHTML(msg),
|
message: this.escapeHTML(msg),
|
||||||
confirmText: this.i18n.t('globals.buttons.ok'),
|
confirmText: p.confirmText || this.i18n.t('globals.buttons.ok'),
|
||||||
cancelText: this.i18n.t('globals.buttons.cancel'),
|
cancelText: p.cancelText || this.i18n.t('globals.buttons.cancel'),
|
||||||
inputAttrs: {
|
inputAttrs: {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
maxlength: 200,
|
maxlength: 200,
|
||||||
|
|
|
@ -134,20 +134,61 @@
|
||||||
</b-field>
|
</b-field>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column">
|
||||||
|
<p v-if="item.email_headers.length === 0 && !item.showHeaders">
|
||||||
|
<a href="#" class="is-size-7" @click.prevent="() => showSMTPHeaders(n)">
|
||||||
|
<b-icon icon="plus" />{{ $t('settings.smtp.setCustomHeaders') }}</a>
|
||||||
|
</p>
|
||||||
|
<b-field v-if="item.email_headers.length > 0 || item.showHeaders"
|
||||||
|
label-position="on-border"
|
||||||
|
:message="$t('settings.smtp.customHeadersHelp')">
|
||||||
|
<b-input v-model="item.strEmailHeaders" name="email_headers" type="textarea"
|
||||||
|
placeholder='[{"X-Custom": "value"}, {"X-Custom2": "value"}]' />
|
||||||
|
</b-field>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
<div>
|
<form @submit.prevent="() => doSMTPTest(item)">
|
||||||
<p v-if="item.email_headers.length === 0 && !item.showHeaders">
|
<div class="columns">
|
||||||
<a href="#" class="is-size-7" @click.prevent="() => showSMTPHeaders(n)">
|
<template v-if="smtpTestItem === n">
|
||||||
<b-icon icon="plus" />{{ $t('settings.smtp.setCustomHeaders') }}</a>
|
<div class="column is-5">
|
||||||
</p>
|
<strong>{{ $t('settings.general.fromEmail') }}</strong>
|
||||||
<b-field v-if="item.email_headers.length > 0 || item.showHeaders"
|
<br />
|
||||||
label-position="on-border"
|
{{ settings['app.from_email'] }}
|
||||||
:message="$t('settings.smtp.customHeadersHelp')">
|
</div>
|
||||||
<b-input v-model="item.strEmailHeaders" name="email_headers" type="textarea"
|
<div class="column is-4">
|
||||||
placeholder='[{"X-Custom": "value"}, {"X-Custom2": "value"}]' />
|
<b-field :label="$t('settings.smtp.toEmail')" label-position="on-border">
|
||||||
</b-field>
|
<b-input type="email" required v-model="testEmail"
|
||||||
</div>
|
:ref="'testEmailTo'" placeholder="email@site.com"
|
||||||
|
:custom-class="`test-email-${n}`" />
|
||||||
|
</b-field>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div class="column has-text-right">
|
||||||
|
<b-button v-if="smtpTestItem === n" class="is-primary"
|
||||||
|
:disabled="isTestEnabled(item)" @click.prevent="() => doSMTPTest(item)">
|
||||||
|
{{ $t('settings.smtp.sendTest') }}
|
||||||
|
</b-button>
|
||||||
|
<a href="#" v-else class="is-primary" @click.prevent="showTestForm(n)">
|
||||||
|
<b-icon icon="rocket-launch-outline" /> {{ $t('settings.smtp.testConnection') }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="errMsg && smtpTestItem === n">
|
||||||
|
<b-field class="mt-4" type="is-danger">
|
||||||
|
<b-input v-model="errMsg" type="textarea"
|
||||||
|
custom-class="has-text-danger is-size-6" readonly />
|
||||||
|
</b-field>
|
||||||
|
</div>
|
||||||
|
</form><!-- smtp test -->
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div><!-- second container column -->
|
</div><!-- second container column -->
|
||||||
</div><!-- block -->
|
</div><!-- block -->
|
||||||
|
@ -161,6 +202,7 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
import { mapState } from 'vuex';
|
||||||
import { regDuration } from '../../constants';
|
import { regDuration } from '../../constants';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
|
@ -174,6 +216,11 @@ export default Vue.extend({
|
||||||
return {
|
return {
|
||||||
data: this.form,
|
data: this.form,
|
||||||
regDuration,
|
regDuration,
|
||||||
|
// Index of the SMTP block item in the array to show the
|
||||||
|
// test form in.
|
||||||
|
smtpTestItem: null,
|
||||||
|
testEmail: '',
|
||||||
|
errMsg: '',
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -211,6 +258,49 @@ export default Vue.extend({
|
||||||
s.showHeaders = true;
|
s.showHeaders = true;
|
||||||
this.data.smtp.splice(i, 1, s);
|
this.data.smtp.splice(i, 1, s);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
testConnection() {
|
||||||
|
let em = this.settings['app.from_email'].replace('>', '').split('<');
|
||||||
|
if (em.length > 1) {
|
||||||
|
em = `<${em[em.length - 1]}>`;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
doSMTPTest(item) {
|
||||||
|
this.errMsg = '';
|
||||||
|
this.$api.testSMTP({ ...item, email: this.testEmail }).then(() => {
|
||||||
|
this.$utils.toast(this.$t('campaigns.testSent'));
|
||||||
|
}).catch((err) => {
|
||||||
|
if (err.response?.data?.message) {
|
||||||
|
this.errMsg = err.response.data.message;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
showTestForm(n) {
|
||||||
|
this.smtpTestItem = n;
|
||||||
|
this.testItem = this.form.smtp[n];
|
||||||
|
this.errMsg = '';
|
||||||
|
|
||||||
|
this.$nextTick(() => {
|
||||||
|
document.querySelector(`.test-email-${n}`).focus();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
isTestEnabled(item) {
|
||||||
|
if (!item.host || !item.port) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (item.auth_protocol !== 'none' && !item.password.trim()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
...mapState(['settings']),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -15,7 +15,7 @@ require (
|
||||||
github.com/knadh/go-pop3 v0.3.0
|
github.com/knadh/go-pop3 v0.3.0
|
||||||
github.com/knadh/goyesql/v2 v2.1.2
|
github.com/knadh/goyesql/v2 v2.1.2
|
||||||
github.com/knadh/koanf v1.2.3
|
github.com/knadh/koanf v1.2.3
|
||||||
github.com/knadh/smtppool v0.4.0
|
github.com/knadh/smtppool v1.0.0
|
||||||
github.com/knadh/stuffbin v1.1.0
|
github.com/knadh/stuffbin v1.1.0
|
||||||
github.com/labstack/echo/v4 v4.6.1
|
github.com/labstack/echo/v4 v4.6.1
|
||||||
github.com/labstack/gommon v0.3.1 // indirect
|
github.com/labstack/gommon v0.3.1 // indirect
|
||||||
|
|
2
go.sum
2
go.sum
|
@ -84,6 +84,8 @@ github.com/knadh/koanf v1.2.3 h1:2Rkr0YhhYk+4QEOm800Q3Pu0Wi87svTxM6uuEb4WhYw=
|
||||||
github.com/knadh/koanf v1.2.3/go.mod h1:xpPTwMhsA/aaQLAilyCCqfpEiY1gpa160AiCuWHJUjY=
|
github.com/knadh/koanf v1.2.3/go.mod h1:xpPTwMhsA/aaQLAilyCCqfpEiY1gpa160AiCuWHJUjY=
|
||||||
github.com/knadh/smtppool v0.4.0 h1:335iXPwZ6katJVhauV4O6e8uPvvPmO6YLrfDQhb6UvE=
|
github.com/knadh/smtppool v0.4.0 h1:335iXPwZ6katJVhauV4O6e8uPvvPmO6YLrfDQhb6UvE=
|
||||||
github.com/knadh/smtppool v0.4.0/go.mod h1:3DJHouXAgPDBz0kC50HukOsdapYSwIEfJGwuip46oCA=
|
github.com/knadh/smtppool v0.4.0/go.mod h1:3DJHouXAgPDBz0kC50HukOsdapYSwIEfJGwuip46oCA=
|
||||||
|
github.com/knadh/smtppool v1.0.0 h1:1c8A7+nD8WdMMzvd3yY5aoY9QBgyGTA+Iq1IdlgKGJw=
|
||||||
|
github.com/knadh/smtppool v1.0.0/go.mod h1:3DJHouXAgPDBz0kC50HukOsdapYSwIEfJGwuip46oCA=
|
||||||
github.com/knadh/stuffbin v1.1.0 h1:f5S5BHzZALjuJEgTIOMC9NidEnBJM7Ze6Lu1GHR/lwU=
|
github.com/knadh/stuffbin v1.1.0 h1:f5S5BHzZALjuJEgTIOMC9NidEnBJM7Ze6Lu1GHR/lwU=
|
||||||
github.com/knadh/stuffbin v1.1.0/go.mod h1:yVCFaWaKPubSNibBsTAJ939q2ABHudJQxRWZWV5yh+4=
|
github.com/knadh/stuffbin v1.1.0/go.mod h1:yVCFaWaKPubSNibBsTAJ939q2ABHudJQxRWZWV5yh+4=
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "SMTP",
|
"settings.smtp.name": "SMTP",
|
||||||
"settings.smtp.retries": "Opakování",
|
"settings.smtp.retries": "Opakování",
|
||||||
"settings.smtp.retriesHelp": "Počet opakovaných pokusů, když zpráva selže.",
|
"settings.smtp.retriesHelp": "Počet opakovaných pokusů, když zpráva selže.",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "Nastavit vlastní záhlaví",
|
"settings.smtp.setCustomHeaders": "Nastavit vlastní záhlaví",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "Nastavení",
|
"settings.title": "Nastavení",
|
||||||
"settings.updateAvailable": "Nová aktualizace {version} je k dispozici.",
|
"settings.updateAvailable": "Nová aktualizace {version} je k dispozici.",
|
||||||
"subscribers.advancedQuery": "Rozšířené",
|
"subscribers.advancedQuery": "Rozšířené",
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "SMTP",
|
"settings.smtp.name": "SMTP",
|
||||||
"settings.smtp.retries": "Wiederholungen",
|
"settings.smtp.retries": "Wiederholungen",
|
||||||
"settings.smtp.retriesHelp": "Maximale Anzahl an Wiederholungen, wenn eine Machricht fehlschlägt.",
|
"settings.smtp.retriesHelp": "Maximale Anzahl an Wiederholungen, wenn eine Machricht fehlschlägt.",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "Benutzerdefinierten Header verwenden",
|
"settings.smtp.setCustomHeaders": "Benutzerdefinierten Header verwenden",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "Einstellungen",
|
"settings.title": "Einstellungen",
|
||||||
"settings.updateAvailable": "Ein neues Update auf {version} ist verfügbar.",
|
"settings.updateAvailable": "Ein neues Update auf {version} ist verfügbar.",
|
||||||
"subscribers.advancedQuery": "Erweitert",
|
"subscribers.advancedQuery": "Erweitert",
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "SMTP",
|
"settings.smtp.name": "SMTP",
|
||||||
"settings.smtp.retries": "Retries",
|
"settings.smtp.retries": "Retries",
|
||||||
"settings.smtp.retriesHelp": "Number of times to retry when a message fails.",
|
"settings.smtp.retriesHelp": "Number of times to retry when a message fails.",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "Set custom headers",
|
"settings.smtp.setCustomHeaders": "Set custom headers",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
"settings.updateAvailable": "A new update {version} is available.",
|
"settings.updateAvailable": "A new update {version} is available.",
|
||||||
"subscribers.advancedQuery": "Advanced",
|
"subscribers.advancedQuery": "Advanced",
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "SMTP",
|
"settings.smtp.name": "SMTP",
|
||||||
"settings.smtp.retries": "Reintentos",
|
"settings.smtp.retries": "Reintentos",
|
||||||
"settings.smtp.retriesHelp": "Número de reintentos cuando un mensaje falla.",
|
"settings.smtp.retriesHelp": "Número de reintentos cuando un mensaje falla.",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "Configurar encabezados personalizados.",
|
"settings.smtp.setCustomHeaders": "Configurar encabezados personalizados.",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "Configuraciones",
|
"settings.title": "Configuraciones",
|
||||||
"settings.updateAvailable": "Una actualización {version} está disponible.",
|
"settings.updateAvailable": "Una actualización {version} está disponible.",
|
||||||
"subscribers.advancedQuery": "Avanzado",
|
"subscribers.advancedQuery": "Avanzado",
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "SMTP",
|
"settings.smtp.name": "SMTP",
|
||||||
"settings.smtp.retries": "Retries",
|
"settings.smtp.retries": "Retries",
|
||||||
"settings.smtp.retriesHelp": "Number of times to retry when a message fails.",
|
"settings.smtp.retriesHelp": "Number of times to retry when a message fails.",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "Set custom headers",
|
"settings.smtp.setCustomHeaders": "Set custom headers",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
"settings.updateAvailable": "A new update {version} is available.",
|
"settings.updateAvailable": "A new update {version} is available.",
|
||||||
"subscribers.advancedQuery": "Advanced",
|
"subscribers.advancedQuery": "Advanced",
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "SMTP",
|
"settings.smtp.name": "SMTP",
|
||||||
"settings.smtp.retries": "Tentatives de renvoi",
|
"settings.smtp.retries": "Tentatives de renvoi",
|
||||||
"settings.smtp.retriesHelp": "Nombre de tentatives de renvoi d'un message en cas d'échec",
|
"settings.smtp.retriesHelp": "Nombre de tentatives de renvoi d'un message en cas d'échec",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "Définir des en-têtes personnalisés",
|
"settings.smtp.setCustomHeaders": "Définir des en-têtes personnalisés",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "Paramètres",
|
"settings.title": "Paramètres",
|
||||||
"settings.updateAvailable": "Une nouvelle version ({version}) est disponible.",
|
"settings.updateAvailable": "Une nouvelle version ({version}) est disponible.",
|
||||||
"subscribers.advancedQuery": "Requête avancée",
|
"subscribers.advancedQuery": "Requête avancée",
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "SMTP",
|
"settings.smtp.name": "SMTP",
|
||||||
"settings.smtp.retries": "Újrapróbálkozások",
|
"settings.smtp.retries": "Újrapróbálkozások",
|
||||||
"settings.smtp.retriesHelp": "Az újrapróbálkozások száma, ha az üzenet sikertelen.",
|
"settings.smtp.retriesHelp": "Az újrapróbálkozások száma, ha az üzenet sikertelen.",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "Egyéni fejlécek beállítása",
|
"settings.smtp.setCustomHeaders": "Egyéni fejlécek beállítása",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "Beállítások",
|
"settings.title": "Beállítások",
|
||||||
"settings.updateAvailable": "Új frissítés {version} elérhető.",
|
"settings.updateAvailable": "Új frissítés {version} elérhető.",
|
||||||
"subscribers.advancedQuery": "További beállítások",
|
"subscribers.advancedQuery": "További beállítások",
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "SMTP",
|
"settings.smtp.name": "SMTP",
|
||||||
"settings.smtp.retries": "Tentativi",
|
"settings.smtp.retries": "Tentativi",
|
||||||
"settings.smtp.retriesHelp": "Numero di tentativi in caso di errore invio messaggio.",
|
"settings.smtp.retriesHelp": "Numero di tentativi in caso di errore invio messaggio.",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "Definisci intestazioni personalizzate",
|
"settings.smtp.setCustomHeaders": "Definisci intestazioni personalizzate",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "Impostazioni",
|
"settings.title": "Impostazioni",
|
||||||
"settings.updateAvailable": "È a disposizione una nuova versione {version}.",
|
"settings.updateAvailable": "È a disposizione una nuova versione {version}.",
|
||||||
"subscribers.advancedQuery": "Avanzate",
|
"subscribers.advancedQuery": "Avanzate",
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "SMTP",
|
"settings.smtp.name": "SMTP",
|
||||||
"settings.smtp.retries": "再トライ",
|
"settings.smtp.retries": "再トライ",
|
||||||
"settings.smtp.retriesHelp": "メッセージ送信失敗時の再試行数",
|
"settings.smtp.retriesHelp": "メッセージ送信失敗時の再試行数",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "カスタムヘッダー設定",
|
"settings.smtp.setCustomHeaders": "カスタムヘッダー設定",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "設定",
|
"settings.title": "設定",
|
||||||
"settings.updateAvailable": "新しい {バージョン} の更新が可能です。",
|
"settings.updateAvailable": "新しい {バージョン} の更新が可能です。",
|
||||||
"subscribers.advancedQuery": "アドバンスド",
|
"subscribers.advancedQuery": "アドバンスド",
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "എസ്. എം. ടീ. പി",
|
"settings.smtp.name": "എസ്. എം. ടീ. പി",
|
||||||
"settings.smtp.retries": "പുനഃശ്രമങ്ങൾ",
|
"settings.smtp.retries": "പുനഃശ്രമങ്ങൾ",
|
||||||
"settings.smtp.retriesHelp": "സന്ദേശമയ്ക്കുന്നത് പരാജയപ്പെട്ടാൽ എത്ര തവണ വീണ്ടും ശ്രമിക്കണം.",
|
"settings.smtp.retriesHelp": "സന്ദേശമയ്ക്കുന്നത് പരാജയപ്പെട്ടാൽ എത്ര തവണ വീണ്ടും ശ്രമിക്കണം.",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "ഇഷ്ടാനുസൃത തലക്കെട്ടുകൾ നൽകുക",
|
"settings.smtp.setCustomHeaders": "ഇഷ്ടാനുസൃത തലക്കെട്ടുകൾ നൽകുക",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "ക്രമീകരണങ്ങൾ",
|
"settings.title": "ക്രമീകരണങ്ങൾ",
|
||||||
"settings.updateAvailable": "A new update {version} is available.",
|
"settings.updateAvailable": "A new update {version} is available.",
|
||||||
"subscribers.advancedQuery": "വിപുലമായത്",
|
"subscribers.advancedQuery": "വിപുലമായത്",
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "SMTP",
|
"settings.smtp.name": "SMTP",
|
||||||
"settings.smtp.retries": "Nieuwe pogingen",
|
"settings.smtp.retries": "Nieuwe pogingen",
|
||||||
"settings.smtp.retriesHelp": "Aantal keer om opnieuw te proberen als een bericht mislukt.",
|
"settings.smtp.retriesHelp": "Aantal keer om opnieuw te proberen als een bericht mislukt.",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "Stel custom headers in",
|
"settings.smtp.setCustomHeaders": "Stel custom headers in",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "Instellingen",
|
"settings.title": "Instellingen",
|
||||||
"settings.updateAvailable": "Een nieuwe update {version} is beschikbaar.",
|
"settings.updateAvailable": "Een nieuwe update {version} is beschikbaar.",
|
||||||
"subscribers.advancedQuery": "Geavanceerd",
|
"subscribers.advancedQuery": "Geavanceerd",
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "SMTP",
|
"settings.smtp.name": "SMTP",
|
||||||
"settings.smtp.retries": "Ponowne próby",
|
"settings.smtp.retries": "Ponowne próby",
|
||||||
"settings.smtp.retriesHelp": "Liczba ponownych prób przy niepowodzeniu",
|
"settings.smtp.retriesHelp": "Liczba ponownych prób przy niepowodzeniu",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "Ustaw niestandardowe nagłówki",
|
"settings.smtp.setCustomHeaders": "Ustaw niestandardowe nagłówki",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "Ustawienia",
|
"settings.title": "Ustawienia",
|
||||||
"settings.updateAvailable": "Nowa wersja {version} jest dostępna.",
|
"settings.updateAvailable": "Nowa wersja {version} jest dostępna.",
|
||||||
"subscribers.advancedQuery": "Zaawansowane",
|
"subscribers.advancedQuery": "Zaawansowane",
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "SMTP",
|
"settings.smtp.name": "SMTP",
|
||||||
"settings.smtp.retries": "Tentativas",
|
"settings.smtp.retries": "Tentativas",
|
||||||
"settings.smtp.retriesHelp": "Número de tentativas quando uma mensagem falhar.",
|
"settings.smtp.retriesHelp": "Número de tentativas quando uma mensagem falhar.",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "Definir cabeçalhos personalizados",
|
"settings.smtp.setCustomHeaders": "Definir cabeçalhos personalizados",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "Configurações",
|
"settings.title": "Configurações",
|
||||||
"settings.updateAvailable": "Atualização: a nova versão {version} já está disponível.",
|
"settings.updateAvailable": "Atualização: a nova versão {version} já está disponível.",
|
||||||
"subscribers.advancedQuery": "Avançado",
|
"subscribers.advancedQuery": "Avançado",
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "SMTP",
|
"settings.smtp.name": "SMTP",
|
||||||
"settings.smtp.retries": "Tentativas",
|
"settings.smtp.retries": "Tentativas",
|
||||||
"settings.smtp.retriesHelp": "Número de vezes para tentar novamente quando uma mensagem falha.",
|
"settings.smtp.retriesHelp": "Número de vezes para tentar novamente quando uma mensagem falha.",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "Colocar headers customizados",
|
"settings.smtp.setCustomHeaders": "Colocar headers customizados",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "Definições",
|
"settings.title": "Definições",
|
||||||
"settings.updateAvailable": "A new update {version} is available.",
|
"settings.updateAvailable": "A new update {version} is available.",
|
||||||
"subscribers.advancedQuery": "Avançado",
|
"subscribers.advancedQuery": "Avançado",
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "SMTP",
|
"settings.smtp.name": "SMTP",
|
||||||
"settings.smtp.retries": "Reîncercări",
|
"settings.smtp.retries": "Reîncercări",
|
||||||
"settings.smtp.retriesHelp": "De câte ori trebuie să reîncercați când un mesaj eșuează.",
|
"settings.smtp.retriesHelp": "De câte ori trebuie să reîncercați când un mesaj eșuează.",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "Setează anteturi personalizate",
|
"settings.smtp.setCustomHeaders": "Setează anteturi personalizate",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "Setări",
|
"settings.title": "Setări",
|
||||||
"settings.updateAvailable": "Este disponibilă o nouă actualizare {versiune}.",
|
"settings.updateAvailable": "Este disponibilă o nouă actualizare {versiune}.",
|
||||||
"subscribers.advancedQuery": "Avansat",
|
"subscribers.advancedQuery": "Avansat",
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "SMTP",
|
"settings.smtp.name": "SMTP",
|
||||||
"settings.smtp.retries": "Повторные попытки",
|
"settings.smtp.retries": "Повторные попытки",
|
||||||
"settings.smtp.retriesHelp": "Количество повторных попыток после ошибки отправки сообщения.",
|
"settings.smtp.retriesHelp": "Количество повторных попыток после ошибки отправки сообщения.",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "Установка настраиваемых заголовков",
|
"settings.smtp.setCustomHeaders": "Установка настраиваемых заголовков",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "Параметры",
|
"settings.title": "Параметры",
|
||||||
"settings.updateAvailable": "Доступна новая версия: {version}.",
|
"settings.updateAvailable": "Доступна новая версия: {version}.",
|
||||||
"subscribers.advancedQuery": "Дополнительно",
|
"subscribers.advancedQuery": "Дополнительно",
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "SMTP",
|
"settings.smtp.name": "SMTP",
|
||||||
"settings.smtp.retries": "Tekrarlama",
|
"settings.smtp.retries": "Tekrarlama",
|
||||||
"settings.smtp.retriesHelp": "Mesaj hata verdiğinde tekrar deneme sayısı.",
|
"settings.smtp.retriesHelp": "Mesaj hata verdiğinde tekrar deneme sayısı.",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "Özel başlık tanımla",
|
"settings.smtp.setCustomHeaders": "Özel başlık tanımla",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "Ayarlar",
|
"settings.title": "Ayarlar",
|
||||||
"settings.updateAvailable": "Yeni bir güncel sürüm {version} mevcuttur.",
|
"settings.updateAvailable": "Yeni bir güncel sürüm {version} mevcuttur.",
|
||||||
"subscribers.advancedQuery": "İleri düzey",
|
"subscribers.advancedQuery": "İleri düzey",
|
||||||
|
|
|
@ -453,7 +453,10 @@
|
||||||
"settings.smtp.name": "SMTP",
|
"settings.smtp.name": "SMTP",
|
||||||
"settings.smtp.retries": "Thử lại",
|
"settings.smtp.retries": "Thử lại",
|
||||||
"settings.smtp.retriesHelp": "Số lần thử lại khi có thông báo không thành công.",
|
"settings.smtp.retriesHelp": "Số lần thử lại khi có thông báo không thành công.",
|
||||||
|
"settings.smtp.sendTest": "Send e-mail",
|
||||||
"settings.smtp.setCustomHeaders": "Đặt tiêu đề tùy chỉnh",
|
"settings.smtp.setCustomHeaders": "Đặt tiêu đề tùy chỉnh",
|
||||||
|
"settings.smtp.testConnection": "Test connection",
|
||||||
|
"settings.smtp.toEmail": "To e-mail",
|
||||||
"settings.title": "Cài đặt",
|
"settings.title": "Cài đặt",
|
||||||
"settings.updateAvailable": "Đã có bản cập nhật mới {version}.",
|
"settings.updateAvailable": "Đã có bản cập nhật mới {version}.",
|
||||||
"subscribers.advancedQuery": "Trình độ cao",
|
"subscribers.advancedQuery": "Trình độ cao",
|
||||||
|
|
|
@ -16,4 +16,4 @@
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
{{ template "footer" }}
|
{{ template "footer" }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
5
static/email-templates/smtp-test.html
Normal file
5
static/email-templates/smtp-test.html
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{{ define "smtp-test" }}
|
||||||
|
{{ template "header" . }}
|
||||||
|
<h2>{{ L.Ts "settings.smtp.testConnection" }}</h2>
|
||||||
|
{{ template "footer" }}
|
||||||
|
{{ end }}
|
Loading…
Reference in a new issue