File indexing completed on 2024-05-05 16:20:04
0001 /* 0002 SPDX-FileCopyrightText: 2000 Bernd Johannes Wuebben <wuebben@math.cornell.edu> 0003 SPDX-FileCopyrightText: 2000 Stephan Kulow <coolo@kde.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #ifndef SMTP_H 0009 #define SMTP_H 0010 0011 #include <QObject> 0012 #include <QTcpSocket> 0013 #include <QTimer> 0014 0015 /*int SMTPServerStatus[] = { 0016 220, // greeting from server 0017 221, // server acknolages goodbye 0018 250, // command successful 0019 354, // ready to receive data 0020 501, // error 0021 550, // user unknown 0022 0 // null 0023 }; 0024 0025 int SMTPClientStatus[] = { 0026 50, // not logged in yet. 0027 100, // logged in, got 220 0028 150, // sent helo, got 250 0029 200, // sent mail from, got 250 0030 250, // sent rctp to, got 250 0031 300, // data sent, got 354 0032 350, // sent data/., got 250 0033 400, // send quit, got 221 0034 450, // finished, logged out 0035 0 // null 0036 }; 0037 */ 0038 0039 #define DEFAULT_SMTP_PORT 25 0040 #define DEFAULT_SMTP_SERVER localhost 0041 #define DEFAULT_SMTP_TIMEOUT 60 0042 0043 #define SMTP_READ_BUFFER_SIZE 256 0044 0045 class SMTP : public QObject 0046 { 0047 Q_OBJECT 0048 public: 0049 explicit SMTP(char *serverhost = nullptr, unsigned short int port = 0, int timeout = DEFAULT_SMTP_TIMEOUT); 0050 ~SMTP() override; 0051 0052 void setServerHost(const QString &serverhost); 0053 void setPort(unsigned short int port); 0054 void setTimeOut(int timeout); 0055 0056 bool isConnected() const 0057 { 0058 return connected; 0059 } 0060 bool isFinished() const 0061 { 0062 return finished; 0063 } 0064 QByteArray getLastLine() const 0065 { 0066 return lastLine; 0067 } 0068 0069 void setSenderAddress(const QString &sender); 0070 void setRecipientAddress(const QString &recipient); 0071 void setMessageSubject(const QString &subject); 0072 void setMessageBody(const QString &message); 0073 void setMessageHeader(const QString &header); 0074 0075 typedef enum { 0076 None = 0, // null 0077 Greet = 220, // greeting from server 0078 Goodbye = 221, // server acknolages quit 0079 Successful = 250, // command successful 0080 ReadyData = 354, // server ready to receive data 0081 Error = 501, // error 0082 Unknown = 550, // user unknown 0083 } SMTPServerStatus; 0084 0085 typedef enum { 0086 Init = 50, // not logged in yet 0087 In = 100, // logged in, got 220 0088 Ready = 150, // sent HELO, got 250 0089 SentFrom = 200, // sent MAIL FROM:, got 250 0090 SentTo = 250, // sent RCTP TO:, got 250 0091 Data = 300, // Data sent, got 354 0092 Finished = 350, // finished sending data, got 250 0093 Quit = 400, // sent Quit, got 221 0094 Out = 450, // finished, logged out 0095 CError = 500, // didn't finish, had error or connection drop 0096 } SMTPClientStatus; 0097 0098 typedef enum { 0099 NoError = 0, 0100 ConnectError = 10, 0101 NotConnected = 11, 0102 ConnectTimeout = 15, 0103 InteractTimeout = 16, 0104 UnknownResponse = 20, 0105 UnknownUser = 30, 0106 Command = 40, 0107 } SMTPError; 0108 0109 protected: 0110 void processLine(QByteArray *line); 0111 0112 public Q_SLOTS: 0113 void openConnection(); 0114 void sendMessage(); 0115 void closeConnection(); 0116 0117 void connectTimerTick(); 0118 void connectTimedOut(); 0119 void interactTimedOut(); 0120 0121 void socketReadyToRead(); 0122 void socketClosed(); 0123 void socketError(QAbstractSocket::SocketError); 0124 0125 Q_SIGNALS: 0126 void connectionClosed(); 0127 void messageSent(); 0128 void error(int); 0129 0130 private: 0131 QString serverHost; 0132 unsigned short int hostPort; 0133 int timeOut; 0134 0135 bool connected; 0136 bool finished; 0137 0138 QString senderAddress; 0139 QString recipientAddress; 0140 QString messageSubject; 0141 QString messageBody, messageHeader; 0142 0143 SMTPClientStatus state; 0144 SMTPClientStatus lastState; 0145 SMTPServerStatus serverState; 0146 0147 QString domainName; 0148 0149 QTcpSocket *sock; 0150 QTimer connectTimer; 0151 QTimer timeOutTimer; 0152 QTimer interactTimer; 0153 0154 char readBuffer[SMTP_READ_BUFFER_SIZE]; 0155 QByteArray lineBuffer; 0156 QByteArray lastLine; 0157 QString writeString; 0158 }; 0159 #endif