Cockatrice 2026-10-19-Development-3.1.2-beta.2
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
smtpclient.h
Go to the documentation of this file.
1#ifndef SMTPCLIENT_H
2#define SMTPCLIENT_H
3
5
6#include <QDateTime>
7#include <QHash>
8#include <QObject>
9#include <QString>
10#include <QTimer>
11#include <qtmetamacros.h>
12
13class QxtSmtp;
14class QByteArray;
15
24
25Q_DECLARE_METATYPE(EmailType)
26
27
36
37Q_DECLARE_METATYPE(FailureReason)
38
39class SmtpClient : public QObject
40{
41 Q_OBJECT
42public:
43 SmtpClient(QObject *parent = nullptr);
44 ~SmtpClient() override;
45
46public slots:
47 bool enqueueActivationTokenMail(const QString &nickname, const QString &recipient, const QString &token);
48 bool enqueueForgotPasswordTokenMail(const QString &nickname,
49 const QString &recipient,
50 const QString &token,
51 qint64 rowId = -1);
52 void sendAllEmails();
53
54signals:
55 void mailDelivered(const QString &userName, EmailType type, const QString &token, qint64 rowId);
56 void mailPermanentlyFailed(const QString &userName,
58 FailureReason reason,
59 const QString &token,
60 qint64 rowId);
61
62protected:
64
65protected slots:
66 void authenticated();
67 void authenticationFailed(const QByteArray &msg);
68 void connected();
69 void connectionFailed(const QByteArray &msg);
70 void disconnected();
71 void encrypted();
72 void encryptionFailed(const QByteArray &msg);
73 void finished();
74 void idleTimeout();
75 void mailFailed(int mailID, int errorCode, const QByteArray &msg);
76 void mailSent(int mailID);
77 void recipientRejected(int mailID, const QString &address, const QByteArray &msg);
78 void senderRejected(int mailID, const QString &address, const QByteArray &msg);
79
80private:
82 {
83 QString userName;
85 QString token;
86 // Database row id for tables that allow multiple rows per user
87 // ({prefix}_forgot_password); -1 when the name alone identifies the row.
88 qint64 rowId = -1;
90 int attempts = 0;
91 int maxAttempts = 0;
92 int retryDelay = 0;
93 QDateTime nextAttempt;
94 };
95
96 PendingEmail buildEmail(const QString &nickname,
98 const QString &subject,
99 const QString &body,
100 const QString &recipient,
101 const QString &token,
102 const QString &email,
103 qint64 rowId = -1);
104 bool enqueue(const PendingEmail &email);
105 void relayoutForSending();
106 QDateTime nextRetryTime(int attempts, int retryDelay) const;
107 void recordFailed(int mailID);
109 bool validateEmailFields(const QString &email,
110 const QString &subject,
111 const QString &body,
112 const QString &recipient,
113 const QString &token,
114 const QString &nickname);
115 int maxRetries() const;
116 int retryDelaySeconds() const;
117
120 QTimer *idleTimer;
123};
124
125#endif
Definition mana_curve_category_widget.h:11
The QxtMailMessage class encapsulates an e-mail according to RFC 2822 and related specifications.
Definition qxtmailmessage.h:38
The QxtSmtp class implements the SMTP protocol for sending email.
Definition qxtsmtp.h:40
void finished()
Definition smtpclient.cpp:281
QxtSmtp * smtp
Definition smtpclient.h:63
void disconnected()
Definition smtpclient.cpp:327
int connectionAttempts
Definition smtpclient.h:121
void mailDelivered(const QString &userName, EmailType type, const QString &token, qint64 rowId)
PendingEmail buildEmail(const QString &nickname, EmailType type, const QString &subject, const QString &body, const QString &recipient, const QString &token, const QString &email, qint64 rowId=-1)
Definition smtpclient.cpp:107
void mailPermanentlyFailed(const QString &userName, EmailType type, FailureReason reason, const QString &token, qint64 rowId)
void mailSent(int mailID)
Definition smtpclient.cpp:463
void sendAllEmails()
Definition smtpclient.cpp:211
QTimer * idleTimer
Definition smtpclient.h:120
QDateTime nextRetryTime(int attempts, int retryDelay) const
Definition smtpclient.cpp:99
void connectionFailed(const QByteArray &msg)
Definition smtpclient.cpp:318
void mailFailed(int mailID, int errorCode, const QByteArray &msg)
Definition smtpclient.cpp:453
void authenticated()
Definition smtpclient.cpp:287
void recipientRejected(int mailID, const QString &address, const QByteArray &msg)
Definition smtpclient.cpp:492
QHash< QString, PendingEmail > pendingEmails
Definition smtpclient.h:118
void encrypted()
Definition smtpclient.cpp:342
void senderRejected(int mailID, const QString &address, const QByteArray &msg)
Definition smtpclient.cpp:519
void relayoutForSending()
Definition smtpclient.cpp:261
void idleTimeout()
Definition smtpclient.cpp:357
bool enqueueActivationTokenMail(const QString &nickname, const QString &recipient, const QString &token)
Definition smtpclient.cpp:172
void connected()
Definition smtpclient.cpp:308
void authenticationFailed(const QByteArray &msg)
Definition smtpclient.cpp:299
SmtpClient(QObject *parent=nullptr)
Definition smtpclient.cpp:52
bool validateEmailFields(const QString &email, const QString &subject, const QString &body, const QString &recipient, const QString &token, const QString &nickname)
Definition smtpclient.cpp:423
bool enqueueForgotPasswordTokenMail(const QString &nickname, const QString &recipient, const QString &token, qint64 rowId=-1)
Definition smtpclient.cpp:190
int retryDelaySeconds() const
Definition smtpclient.cpp:93
void encryptionFailed(const QByteArray &msg)
Definition smtpclient.cpp:347
bool enqueue(const PendingEmail &email)
Definition smtpclient.cpp:138
int maxRetries() const
Definition smtpclient.cpp:86
void recordConnectionFailure()
Definition smtpclient.cpp:397
QHash< int, QString > mailIdToUser
Definition smtpclient.h:119
QDateTime connectionBackoffUntil
Definition smtpclient.h:122
void recordFailed(int mailID)
Definition smtpclient.cpp:363
EmailType const QString & token
Definition smtpclient.cpp:31
EmailType type
Definition smtpclient.cpp:30
EmailType
Types of e-mail the SMTP client is able to deliver.
Definition smtpclient.h:20
@ ForgotPassword
Definition smtpclient.h:22
@ Activation
Definition smtpclient.h:21
FailureReason
Why a permanent e-mail delivery failure occurred.
Definition smtpclient.h:31
@ RetryExhausted
Definition smtpclient.h:32
@ RecipientRejected
Definition smtpclient.h:33
@ SenderRejected
Definition smtpclient.h:34
Definition smtpclient.h:82
QString userName
Definition smtpclient.h:83
qint64 rowId
Definition smtpclient.h:88
int maxAttempts
Definition smtpclient.h:91
QString token
Definition smtpclient.h:85
QxtMailMessage message
Definition smtpclient.h:89
QDateTime nextAttempt
Definition smtpclient.h:93
int retryDelay
Definition smtpclient.h:92
int attempts
Definition smtpclient.h:90
EmailType type
Definition smtpclient.h:84