diff --git a/SMTPEmail.pro b/SMTPEmail.pro index 4fc4400..02a7d8e 100644 --- a/SMTPEmail.pro +++ b/SMTPEmail.pro @@ -16,8 +16,6 @@ TEMPLATE = lib DEFINES += SMTP_BUILD win32:CONFIG += dll -QMAKE_CXXFLAGS += -fPIC - SOURCES += \ src/emailaddress.cpp \ src/mimeattachment.cpp \ diff --git a/src/mimemessage.cpp b/src/mimemessage.cpp index 0c4ebc2..cb2050e 100644 --- a/src/mimemessage.cpp +++ b/src/mimemessage.cpp @@ -24,11 +24,12 @@ /* [1] Constructors and Destructors */ MimeMessage::MimeMessage(bool createAutoMimeContent) : + replyTo(Q_NULLPTR), hEncoding(MimePart::_8Bit) { if (createAutoMimeContent) this->content = new MimeMultiPart(); - + autoMimeContentCreated = createAutoMimeContent; } @@ -58,6 +59,10 @@ void MimeMessage::setContent(MimePart *content) { this->content = content; } +void MimeMessage::setReplyTo(EmailAddress* rto) { + replyTo = rto; +} + void MimeMessage::setSender(EmailAddress* e) { this->sender = e; @@ -127,6 +132,10 @@ const QList & MimeMessage::getRecipients(RecipientType type) cons } } +const EmailAddress* MimeMessage::getReplyTo() const { + return replyTo; +} + const QString & MimeMessage::getSubject() const { return subject; @@ -175,7 +184,7 @@ QString MimeMessage::toString() /* ---------------------------------- */ - /* ------- Recipients / To ---------- */ + /* ------- Recipients / To ---------- */ mime += "To:"; QList::iterator it; int i; for (i = 0, it = recipientsTo.begin(); it != recipientsTo.end(); ++it, ++i) @@ -245,9 +254,31 @@ QString MimeMessage::toString() default: mime += subject; } + mime += "\r\n"; + /* ---------------------------------- */ + + /* ---------- Reply-To -------------- */ + if (replyTo) { + mime += "Reply-To: "; + if (replyTo->getName() != "") + { + switch (hEncoding) + { + case MimePart::Base64: + mime += " =?utf-8?B?" + QByteArray().append(replyTo->getName()).toBase64() + "?="; + break; + case MimePart::QuotedPrintable: + mime += " =?utf-8?Q?" + QuotedPrintable::encode(QByteArray().append(replyTo->getName())).replace(' ', "_").replace(':',"=3A") + "?="; + break; + default: + mime += " " + replyTo->getName(); + } + } + mime += " <" + replyTo->getAddress() + ">\r\n"; + } + /* ---------------------------------- */ - mime += "\r\n"; mime += "MIME-Version: 1.0\r\n"; mime += content->toString(); diff --git a/src/mimemessage.h b/src/mimemessage.h index 18b4ec3..1a12cd3 100644 --- a/src/mimemessage.h +++ b/src/mimemessage.h @@ -53,6 +53,7 @@ public: void addBcc(EmailAddress* rcpt); void setSubject(const QString & subject); void addPart(MimePart* part); + void setReplyTo(EmailAddress* rto); void setHeaderEncoding(MimePart::Encoding); @@ -60,6 +61,7 @@ public: const QList & getRecipients(RecipientType type = To) const; const QString & getSubject() const; const QList & getParts() const; + const EmailAddress* getReplyTo() const; MimePart& getContent(); void setContent(MimePart *content); @@ -77,11 +79,12 @@ protected: /* [4] Protected members */ EmailAddress* sender; + EmailAddress* replyTo; QList recipientsTo, recipientsCc, recipientsBcc; QString subject; MimePart *content; bool autoMimeContentCreated; - + MimePart::Encoding hEncoding; /* [4] --- */ diff --git a/src/smtpclient.cpp b/src/smtpclient.cpp index aaa5909..7370a78 100644 --- a/src/smtpclient.cpp +++ b/src/smtpclient.cpp @@ -25,6 +25,7 @@ /* [1] Constructors and destructors */ SmtpClient::SmtpClient(const QString & host, int port, ConnectionType connectionType) : + socket(NULL), name("localhost"), authMethod(AuthPlain), connectionTimeout(5000), @@ -44,7 +45,10 @@ SmtpClient::SmtpClient(const QString & host, int port, ConnectionType connection this, SLOT(socketReadyRead())); } -SmtpClient::~SmtpClient() {} +SmtpClient::~SmtpClient() { + if (socket) + delete socket; +} /* [1] --- */ @@ -80,6 +84,9 @@ void SmtpClient::setConnectionType(ConnectionType ct) { this->connectionType = ct; + if (socket) + delete socket; + switch (connectionType) { case TcpConnection: @@ -325,7 +332,7 @@ bool SmtpClient::login(const QString &user, const QString &password, AuthMethod } } } - catch (ResponseTimeoutException e) + catch (ResponseTimeoutException) { // Responce Timeout exceeded emit smtpError(AuthenticationFailedError); @@ -421,7 +428,7 @@ void SmtpClient::quit() /* [4] Protected methods */ -void SmtpClient::waitForResponse() throw (ResponseTimeoutException) +void SmtpClient::waitForResponse() { do { if (!socket->waitForReadyRead(responseTimeout)) @@ -448,7 +455,7 @@ void SmtpClient::waitForResponse() throw (ResponseTimeoutException) } while (true); } -void SmtpClient::sendMessage(const QString &text) throw (SendMessageTimeoutException) +void SmtpClient::sendMessage(const QString &text) { socket->write(text.toUtf8() + "\r\n"); if (! socket->waitForBytesWritten(sendMessageTimeout)) @@ -463,11 +470,11 @@ void SmtpClient::sendMessage(const QString &text) throw (SendMessageTimeoutExcep /* [5] Slots for the socket's signals */ -void SmtpClient::socketStateChanged(QAbstractSocket::SocketState state) +void SmtpClient::socketStateChanged(QAbstractSocket::SocketState /*state*/) { } -void SmtpClient::socketError(QAbstractSocket::SocketError socketError) +void SmtpClient::socketError(QAbstractSocket::SocketError /*socketError*/) { } diff --git a/src/smtpclient.h b/src/smtpclient.h index ee83884..26afe81 100644 --- a/src/smtpclient.h +++ b/src/smtpclient.h @@ -60,7 +60,7 @@ public: /* [1] Constructors and Destructors */ - SmtpClient(const QString & host = "locahost", int port = 25, ConnectionType ct = TcpConnection); + SmtpClient(const QString & host = "localhost", int port = 25, ConnectionType ct = TcpConnection); ~SmtpClient(); @@ -154,9 +154,9 @@ protected: /* [5] Protected methods */ - void waitForResponse() throw (ResponseTimeoutException); + void waitForResponse(); - void sendMessage(const QString &text) throw (SendMessageTimeoutException); + void sendMessage(const QString &text); /* [5] --- */