#ifndef SMTPCLIENT_H #define SMTPCLIENT_H #include #include #include "mimemessage.h" class SmtpClient : public QObject { Q_OBJECT public: /* [0] Enumerations */ enum AuthMethod { AuthPlain, AuthLogin }; enum SmtpError { ConnectionTimeoutError, ResponseTimeoutError, AuthentificationFailedError, ServerError, // 4xx smtp error ClientError // 5xx smtp error }; enum ConnectionType { TcpConnection, SslConnection }; /* [0] --- */ /* [1] Constructors and Destructors */ SmtpClient(QString host = "locahost", int port = 25, ConnectionType ct = TcpConnection); ~SmtpClient(); /* [1] --- */ /* [2] Getters and Setters */ const QString& getHost() const; void setHost(QString &host); int getPort() const; void setPort(int port); ConnectionType getConnectionType() const; void setConnectionType(ConnectionType ct); const QString & getUser() const; void setUser(const QString &host); const QString & getPassword() const; void setPassword(const QString &password); SmtpClient::AuthMethod getAuthMethod() const; void setAuthMethod(AuthMethod method); /* [2] --- */ /* [3] Public methods */ bool connectToHost(); bool login(); bool login(const QString &user, const QString &password, AuthMethod method = AuthLogin); bool sendMail(MimeMessage& email); void quit(); /* [3] --- */ protected: /* [4] Protected members */ QTcpSocket *socket; QString host; int port; bool useSsl; QString user; QString password; AuthMethod authMethod; int connectionTimeout; int responseTimeout; QString responseText; int responseCode; class ResponseTimeoutException {}; /* [4] --- */ /* [5] Protected methods */ void waitForResponse() throw (ResponseTimeoutException); void sendMessage(const QString &text); /* [5] --- */ protected slots: /* [6] Protected slots */ void socketStateChanged(QAbstractSocket::SocketState state); void socketError(QAbstractSocket::SocketError error); void socketReadyRead(); /* [6] --- */ signals: /* [7] Signals */ void smtpError(SmtpError e); /* [7] --- */ }; #endif // SMTPCLIENT_H