staging #11
26
Dockerfile
Normal file
26
Dockerfile
Normal file
@ -0,0 +1,26 @@
|
||||
# BUILD
|
||||
FROM gitea.pena/penadevops/container-images/golang:main as build
|
||||
|
||||
# Update packages and clear cache
|
||||
RUN apk add --no-cache curl
|
||||
# Set work directory
|
||||
WORKDIR /app
|
||||
RUN apk add git
|
||||
# Add main files to app
|
||||
ADD . .
|
||||
# Download go depences
|
||||
RUN go mod download
|
||||
# Build app
|
||||
RUN GOOS=linux go build -o bin ./cmd/main.go
|
||||
|
||||
# PRODUCTION
|
||||
FROM gitea.pena/penadevops/container-images/alpine:main
|
||||
|
||||
# Install packages
|
||||
RUN apk --no-cache add ca-certificates
|
||||
# Create home directory
|
||||
WORKDIR /app
|
||||
# Copy build file
|
||||
COPY --from=build /app/bin ./app
|
||||
# CMD
|
||||
CMD ["./app"]
|
26
deployments/main/docker-compose.yaml
Normal file
26
deployments/main/docker-compose.yaml
Normal file
@ -0,0 +1,26 @@
|
||||
version: "3.3"
|
||||
|
||||
services:
|
||||
mailnotifier:
|
||||
hostname: mailnotifier
|
||||
container_name: mailnotifier
|
||||
image: $CI_REGISTRY_IMAGE/main:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID
|
||||
tty: true
|
||||
environment:
|
||||
- MONGO_HOST=10.8.0.8
|
||||
- MONGO_PORT=27017
|
||||
- MONGO_USER=mailnotifier
|
||||
- MONGO_PASSWORD=vWwbCSg4bf0p
|
||||
- MONGO_DB=mailnotifier
|
||||
- MONGO_AUTH=mailnotifier
|
||||
- KAFKA_BROKERS=10.8.0.8:9092
|
||||
- KAFKA_TOPIC=mailnotifier
|
||||
- SMTP_API_URL=https://api.smtp.bz/v1/smtp/send
|
||||
- SMTP_HOST=connect.mailclient.bz
|
||||
- SMTP_PORT=587
|
||||
- SMTP_UNAME=team@pena.digital
|
||||
- SMTP_PASS=AyMfwqA9LkQH
|
||||
- SMTP_API_KEY=8tv2xcsfCMBX3TCQxzgeeEwAEYyQrPUp0ggw
|
||||
- SMTP_SENDER=recovery@noreply.pena.digital
|
||||
- CUSTOMER_URL=10.8.0.8:8086
|
||||
- QUIZ_RPC_URL=10.8.0.9:9000
|
16
deployments/staging/docker-compose.yaml
Normal file
16
deployments/staging/docker-compose.yaml
Normal file
@ -0,0 +1,16 @@
|
||||
version: "3.3"
|
||||
|
||||
services:
|
||||
mailnotifier:
|
||||
image: gitea.pena:3000/penaside/notifier/staging:$GITHUB_RUN_NUMBER
|
||||
tty: true
|
||||
environment:
|
||||
MONGO_URL: mongodb://mailnotifier:vWwbCSg4bf0p@10.7.0.6:27017/?authSource=verification
|
||||
MONGO_DB_NAME: mailnotifier
|
||||
KAFKA_BROKERS: 10.7.0.6:9092
|
||||
KAFKA_TOPIC_MAIL_NOTIFIER: mailnotifier
|
||||
API_URL: https://api.smtp.bz/v1/smtp/send
|
||||
MAIL_SENDER: kotilion.95@gmail.com
|
||||
MAIL_API_KEY: P0YsjUB137upXrr1NiJefHmXVKW1hmBWlpev
|
||||
CUSTOMER_MICROSERVICE_GRPC_URL: 10.7.0.6:8086
|
||||
QUIZ_CORE_MICROSERVICE_GRPC_URL: 10.7.0.5:9000
|
2
go.mod
2
go.mod
@ -5,7 +5,7 @@ go 1.23.2
|
||||
toolchain go1.23.3
|
||||
|
||||
require (
|
||||
gitea.pena/PenaSide/common v0.0.0-20241216115106-ecdff721f8a3
|
||||
gitea.pena/PenaSide/common v0.0.0-20241231090536-2454377ad2a0
|
||||
gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735
|
||||
github.com/caarlos0/env/v8 v8.0.0
|
||||
github.com/gofiber/fiber/v2 v2.51.0
|
||||
|
4
go.sum
4
go.sum
@ -1,5 +1,5 @@
|
||||
gitea.pena/PenaSide/common v0.0.0-20241216115106-ecdff721f8a3 h1:oZenr/Am7+/8ZPLhpW13cJQ0c+usnqKZiWw8cXE6E1Q=
|
||||
gitea.pena/PenaSide/common v0.0.0-20241216115106-ecdff721f8a3/go.mod h1:U7QFuvkrIWyb/m/SOyrsroS7DJntjcr9k7kNy3vtPdU=
|
||||
gitea.pena/PenaSide/common v0.0.0-20241231090536-2454377ad2a0 h1:B4+DAND6gJnCsc9DZY6XyMVLzD23nI8whk8xI7XKGrM=
|
||||
gitea.pena/PenaSide/common v0.0.0-20241231090536-2454377ad2a0/go.mod h1:U7QFuvkrIWyb/m/SOyrsroS7DJntjcr9k7kNy3vtPdU=
|
||||
gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735 h1:jDVeUhGBTXBibmW5dmtJg2m2+z5z2Rf6J4G0LpjVoJ0=
|
||||
gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735/go.mod h1:gdd+vOT6up9STkEbxa2qESLIMZFjCmRbkcheFQCVgZU=
|
||||
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
|
||||
|
@ -3,9 +3,9 @@ package clients
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"gitea.pena/PenaSide/notifier/internal/models"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"go.uber.org/zap"
|
||||
"gitea.pena/PenaSide/notifier/internal/models"
|
||||
)
|
||||
|
||||
type Customer struct {
|
||||
@ -41,7 +41,7 @@ func (c *Customer) GetAccount(userID string) (models.Account, error) {
|
||||
|
||||
statusCode, body, errs := resp.Bytes()
|
||||
if errs != nil {
|
||||
c.logger.Error("Error sending request:", zap.Error(errs[0]))
|
||||
c.logger.Error(errSendingRequest.Error(), zap.Error(errs[0]))
|
||||
return account, errs[0]
|
||||
}
|
||||
|
||||
|
7
internal/clients/errors.go
Normal file
7
internal/clients/errors.go
Normal file
@ -0,0 +1,7 @@
|
||||
package clients
|
||||
|
||||
import "errors"
|
||||
|
||||
var (
|
||||
errSendingRequest = errors.New("error sending request")
|
||||
)
|
@ -79,7 +79,7 @@ func (m *MailClient) MailSender(data SenderDeps) error {
|
||||
|
||||
statusCode, body, errs := req.Bytes()
|
||||
if errs != nil {
|
||||
m.logger.Error("Error sending request:", zap.Error(errs[0]))
|
||||
m.logger.Error(errSendingRequest.Error(), zap.Error(errs[0]))
|
||||
return errs[0]
|
||||
}
|
||||
|
||||
|
@ -2,10 +2,10 @@ package clients
|
||||
|
||||
import (
|
||||
"context"
|
||||
"gitea.pena/PenaSide/notifier/internal/proto/notifyer"
|
||||
"go.uber.org/zap"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/credentials/insecure"
|
||||
"gitea.pena/PenaSide/notifier/internal/proto/notifyer"
|
||||
)
|
||||
|
||||
type QuizClient struct {
|
||||
@ -20,10 +20,13 @@ func NewQuizClient(address string, logger *zap.Logger) *QuizClient {
|
||||
}
|
||||
}
|
||||
|
||||
var coreRpcHost = "core rpc host"
|
||||
var request = "request"
|
||||
|
||||
func (q *QuizClient) GetQuizzes(ctx context.Context, req *notifyer.GetQuizzesRequest) (*notifyer.GetQuizzesResponse, error) {
|
||||
connection, err := grpc.Dial(q.address, grpc.WithTransportCredentials(insecure.NewCredentials()))
|
||||
connection, err := grpc.NewClient(q.address, grpc.WithTransportCredentials(insecure.NewCredentials()))
|
||||
if err != nil {
|
||||
q.logger.Error("failed to connect on GetQuizzes of core rpc", zap.Error(err), zap.String("core rpc host", q.address))
|
||||
q.logger.Error("failed to connect on GetQuizzes of core rpc", zap.Error(err), zap.String(coreRpcHost, q.address))
|
||||
return nil, err
|
||||
}
|
||||
defer func() {
|
||||
@ -36,7 +39,7 @@ func (q *QuizClient) GetQuizzes(ctx context.Context, req *notifyer.GetQuizzesReq
|
||||
|
||||
response, err := client.GetQuizzes(ctx, req)
|
||||
if err != nil {
|
||||
q.logger.Error("failed to GetQuizzes core rpc", zap.Error(err), zap.Any("request", req))
|
||||
q.logger.Error("failed to GetQuizzes core rpc", zap.Error(err), zap.Any(request, req))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@ -44,9 +47,9 @@ func (q *QuizClient) GetQuizzes(ctx context.Context, req *notifyer.GetQuizzesReq
|
||||
}
|
||||
|
||||
func (q *QuizClient) GetStartedQuizzes(ctx context.Context, req *notifyer.GetStartedQuizzesRequest) (*notifyer.GetStartedQuizzesResponse, error) {
|
||||
connection, err := grpc.Dial(q.address, grpc.WithTransportCredentials(insecure.NewCredentials()))
|
||||
connection, err := grpc.NewClient(q.address, grpc.WithTransportCredentials(insecure.NewCredentials()))
|
||||
if err != nil {
|
||||
q.logger.Error("failed to connect on GetStartedQuizzes of core rpc", zap.Error(err), zap.String("core rpc host", q.address))
|
||||
q.logger.Error("failed to connect on GetStartedQuizzes of core rpc", zap.Error(err), zap.String(coreRpcHost, q.address))
|
||||
return nil, err
|
||||
}
|
||||
defer func() {
|
||||
@ -59,7 +62,7 @@ func (q *QuizClient) GetStartedQuizzes(ctx context.Context, req *notifyer.GetSta
|
||||
|
||||
response, err := client.GetStartedQuizzes(ctx, req)
|
||||
if err != nil {
|
||||
q.logger.Error("failed to GetStartedQuizzes core rpc", zap.Error(err), zap.Any("request", req))
|
||||
q.logger.Error("failed to GetStartedQuizzes core rpc", zap.Error(err), zap.Any(request, req))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
@ -2,11 +2,9 @@ package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"gitea.pena/PenaSide/notifier/internal/models"
|
||||
"time"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
)
|
||||
|
||||
type Repository struct {
|
||||
@ -22,7 +20,6 @@ func NewRepository(mdb *mongo.Collection) *Repository {
|
||||
|
||||
// записываем каждый месседж по одному
|
||||
func (r *Repository) Insert(ctx context.Context, mes models.Message) error {
|
||||
mes.ID = primitive.NewObjectID()
|
||||
_, err := r.mdb.InsertOne(ctx, mes)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -35,24 +32,25 @@ func (r *Repository) Insert(ctx context.Context, mes models.Message) error {
|
||||
|
||||
// получаем сразу все в tools метод распределения
|
||||
func (r *Repository) GetMany(ctx context.Context) ([]models.Message, error) {
|
||||
to := time.Now().AddDate(0, 0, -15)
|
||||
from := time.Now().AddDate(0, 0, -7)
|
||||
|
||||
// to := time.Now().AddDate(0, 0, -15)
|
||||
// from := time.Now().AddDate(0, 0, -7)
|
||||
//
|
||||
filter := bson.D{
|
||||
{"$and", bson.A{
|
||||
{Key: "$and", Value: bson.A{
|
||||
bson.D{
|
||||
{"$or", bson.A{
|
||||
bson.D{{"sendRegistration", false}},
|
||||
bson.D{{"sendNoneCreated", false}},
|
||||
bson.D{{"sendUnpublished", false}},
|
||||
}},
|
||||
},
|
||||
bson.D{
|
||||
{"sendAt", bson.D{
|
||||
{"$gte", to},
|
||||
{"$lte", from},
|
||||
{Key: "$or", Value: bson.A{
|
||||
bson.D{{Key: "sendRegistration", Value: false}},
|
||||
bson.D{{Key: "sendNoneCreated", Value: false}},
|
||||
bson.D{{Key: "sendUnpublished", Value: false}},
|
||||
bson.D{{Key: "sendPaid", Value: false}},
|
||||
}},
|
||||
},
|
||||
// bson.D{
|
||||
// {"sendAt", bson.D{
|
||||
// {"$gte", to},
|
||||
// {"$lte", from},
|
||||
// }},
|
||||
// },
|
||||
}},
|
||||
}
|
||||
|
||||
|
@ -6,6 +6,7 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/twmb/franz-go/pkg/kgo"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.uber.org/zap"
|
||||
"gitea.pena/PenaSide/notifier/internal/clients"
|
||||
"gitea.pena/PenaSide/notifier/internal/models"
|
||||
@ -79,6 +80,7 @@ func (c *Consumer) consumeMessages(ctx context.Context) {
|
||||
}
|
||||
|
||||
func (c *Consumer) processMsg(ctx context.Context, message models.Message) error {
|
||||
message.ID = primitive.NewObjectID()
|
||||
err := c.repo.Insert(ctx, message)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error insert kafka data to mongo: %w", err)
|
||||
|
@ -1,12 +1,74 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Paid</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Hello dude!</h1>
|
||||
<p>Get money.</p>
|
||||
<p>Pena Co Ltd</p>
|
||||
</body>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Document</title>
|
||||
<style>
|
||||
/* Сброс стилей */
|
||||
body,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
p,
|
||||
div,
|
||||
img,
|
||||
button,
|
||||
table,
|
||||
th,
|
||||
td {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #f2f2f7;
|
||||
font-family: Arial, sans-serif;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
h1 {
|
||||
font-size: 25px !important;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 20px !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body style="background-color: #f2f2f7; font-family: Arial, sans-serif">
|
||||
<table style="width: 100%; padding: 16px">
|
||||
<tr>
|
||||
<td>
|
||||
<img class="image" style="width: 103px; height: 40px" src="https://storage.yandexcloud.net/squizimages/logo-email-squiz.png" />
|
||||
</td>
|
||||
<td>
|
||||
<p style="text-align: end; color: #9a9aaf; font-size: 14px">Квиз для вашего бизнеса</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2" style="height: 100%">
|
||||
<p style="color: #9a9aaf; font-size: 20px; margin-bottom: 50px">
|
||||
Здравствуйте, мы заметили что вы не стали пользоваться нашим продуктом PenaQuiz. Напишите пожалуйста нам в техническую поддержку что вам не понравилось, может не хватает какого то функционала или же возникли затруднения. </p>
|
||||
<p style="color: #9a9aaf; font-size: 20px; margin-bottom: 50px">
|
||||
Информация обязательно будет доведена до лиц принимающих решения, так как мы хотим и готовы развиваться совместно с нашими клиентами.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2" style="text-align: center; padding: 0">
|
||||
<a style="color: #7e2aea; font-size: 20px; font-style: normal; font-weight: 400; line-height: normal">
|
||||
quiz.pena.digital
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,12 +1,71 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Create Quiz</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Hello dude!</h1>
|
||||
<p>Create QUIZ.</p>
|
||||
<p>Pena Co Ltd</p>
|
||||
</body>
|
||||
</html>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Document</title>
|
||||
<style>
|
||||
/* Сброс стилей */
|
||||
body,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
p,
|
||||
div,
|
||||
img,
|
||||
button,
|
||||
table,
|
||||
th,
|
||||
td {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #f2f2f7;
|
||||
font-family: Arial, sans-serif;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
h1 {
|
||||
font-size: 25px !important;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 20px !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body style="background-color: #f2f2f7; font-family: Arial, sans-serif">
|
||||
<table style="width: 100%; padding: 16px">
|
||||
<tr>
|
||||
<td>
|
||||
<img class="image" style="width: 103px; height: 40px" src="https://storage.yandexcloud.net/squizimages/logo-email-squiz.png" />
|
||||
</td>
|
||||
<td>
|
||||
<p style="text-align: end; color: #9a9aaf; font-size: 14px">Квиз для вашего бизнеса</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2" style="height: 100%">
|
||||
<p style="color: #9a9aaf; font-size: 20px; margin-bottom: 50px">
|
||||
Здравствуйте, мы заметили что у вас возникли сложности в использовании продукта PenaQuiz, расскажите пожалуйста нашей технической поддержке,о сложностях которые у вас возникли и мы обязательно разберемся и в течении рабочего дня вместе составим необходимый опрос для запуска рекламы или исследования.</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2" style="text-align: center; padding: 0">
|
||||
<a style="color: #7e2aea; font-size: 20px; font-style: normal; font-weight: 400; line-height: normal">
|
||||
quiz.pena.digital
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
<
|
||||
|
@ -1,12 +1,72 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Start Quiz</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Hello dude!</h1>
|
||||
<p>Publish QUIZ.</p>
|
||||
<p>Pena Co Ltd</p>
|
||||
</body>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Document</title>
|
||||
<style>
|
||||
/* Сброс стилей */
|
||||
body,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
p,
|
||||
div,
|
||||
img,
|
||||
button,
|
||||
table,
|
||||
th,
|
||||
td {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #f2f2f7;
|
||||
font-family: Arial, sans-serif;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
h1 {
|
||||
font-size: 25px !important;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 20px !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body style="background-color: #f2f2f7; font-family: Arial, sans-serif">
|
||||
<table style="width: 100%; padding: 16px">
|
||||
<tr>
|
||||
<td>
|
||||
<img class="image" style="width: 103px; height: 40px" src="https://storage.yandexcloud.net/squizimages/logo-email-squiz.png" />
|
||||
</td>
|
||||
<td>
|
||||
<p style="text-align: end; color: #9a9aaf; font-size: 14px">Квиз для вашего бизнеса</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2" style="height: 100%">
|
||||
<p style="color: #9a9aaf; font-size: 20px; margin-bottom: 50px">
|
||||
Здравствуйте, мы заметили что у вас возникли сложности в использовании продукта PenaQuiz, расскажите пожалуйста нашей технической поддержке,о сложностях которые у вас возникли и мы обязательно разберемся и в течении рабочего дня вместе составим необходимый опрос для запуска рекламы или исследования.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2" style="text-align: center; padding: 0">
|
||||
<a style="color: #7e2aea; font-size: 20px; font-style: normal; font-weight: 400; line-height: normal">
|
||||
quiz.pena.digital
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,12 +1,74 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Start Quiz</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Hello dude!</h1>
|
||||
<p>❤️</p>
|
||||
<p>Pena Co Ltd</p>
|
||||
</body>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Document</title>
|
||||
<style>
|
||||
/* Сброс стилей */
|
||||
body,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
p,
|
||||
div,
|
||||
img,
|
||||
button,
|
||||
table,
|
||||
th,
|
||||
td {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #f2f2f7;
|
||||
font-family: Arial, sans-serif;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
h1 {
|
||||
font-size: 25px !important;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 20px !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body style="background-color: #f2f2f7; font-family: Arial, sans-serif">
|
||||
<table style="width: 100%; padding: 16px">
|
||||
<tr>
|
||||
<td>
|
||||
<img class="image" style="width: 103px; height: 40px" src="https://storage.yandexcloud.net/squizimages/logo-email-squiz.png" />
|
||||
</td>
|
||||
<td>
|
||||
<p style="text-align: end; color: #9a9aaf; font-size: 14px">Квиз для вашего бизнеса</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2" style="height: 100%">
|
||||
<p style="color: #9a9aaf; font-size: 20px; margin-bottom: 50px">
|
||||
Здравствуйте вы зарегистрировались на продукте PenaQuiz и в течении 14 дней вы можете создавать квизы, и получать данные от любого количества заявок абсолютно бесплатно. </p>
|
||||
<p style="color: #9a9aaf; font-size: 20px; margin-bottom: 50px">
|
||||
При возникновении любых вопросов или проблем пишите онлайн консультанту (значок вопроса в нижнем правом углу экрана на сайте). Так же вы можете заказать создание квиза под ваш бизнес и требования на нашей платформе, для заказа пишите <a href="https://t.me/penaquiz">@penaquiz</a>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2" style="text-align: center; padding: 0">
|
||||
<a style="color: #7e2aea; font-size: 20px; font-style: normal; font-weight: 400; line-height: normal">
|
||||
quiz.pena.digital
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
Loading…
Reference in New Issue
Block a user