2020-11-18 Fred Gleason <fredg@paravelsystems.com>

* Added a '--dry-run' switch to the 'sendmail_test' test harness.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2020-11-19 12:14:30 -05:00
parent aba286e097
commit 55db0e4dd9
5 changed files with 26 additions and 7 deletions

View File

@ -20606,3 +20606,5 @@
2020-11-18 Fred Gleason <fredg@paravelsystems.com>
* Implemented support for multi-byte UTF-8 characters for the
display-name component of e-mail addresses in 'RDSendMail()'.
2020-11-18 Fred Gleason <fredg@paravelsystems.com>
* Added a '--dry-run' switch to the 'sendmail_test' test harness.

View File

@ -103,6 +103,8 @@ QByteArray __RDSendMail_EncodeAddress(const QString &str,bool *ok)
//
// Output in "display-name <local@domain>" format
//
// FIXME: Add support for IDNA (see RFC5891)
//
if(name.isEmpty()) {
return addr.toAscii();
}
@ -116,7 +118,8 @@ QByteArray __RDSendMail_EncodeAddress(const QString &str,bool *ok)
//
bool RDSendMail(QString *err_msg,const QString &subject,const QString &body,
const QString &from_addr,const QStringList &to_addrs,
const QStringList &cc_addrs,const QStringList &bcc_addrs)
const QStringList &cc_addrs,const QStringList &bcc_addrs,
bool dry_run)
{
QStringList args;
QProcess *proc=NULL;
@ -209,6 +212,13 @@ bool RDSendMail(QString *err_msg,const QString &subject,const QString &body,
msg+="\r\n";
msg+=raw;
if(dry_run) {
printf("*** MESSAGE STARTS ***\n");
printf("%s",msg.toAscii().constData());
printf("*** MESSAGE ENDS ***\n");
return true;
}
//
// Send message
//
@ -247,10 +257,11 @@ bool RDSendMail(QString *err_msg,const QString &subject,const QString &body,
bool RDSendMail(QString *err_msg,const QString &subject,const QString &body,
const QString &from_addr,const QString &to_addrs,
const QString &cc_addrs,const QString &bcc_addrs)
const QString &cc_addrs,const QString &bcc_addrs,bool dry_run)
{
return RDSendMail(err_msg,subject,body,from_addr,
to_addrs.split(",",QString::SkipEmptyParts),
cc_addrs.split(",",QString::SkipEmptyParts),
bcc_addrs.split(",",QString::SkipEmptyParts));
bcc_addrs.split(",",QString::SkipEmptyParts),
dry_run);
}

View File

@ -27,11 +27,11 @@
bool RDSendMail(QString *err_msg,const QString &subject,const QString &body,
const QString &from_addr,const QStringList &to_addrs,
const QStringList &cc_addrs=QStringList(),
const QStringList &bcc_addrs=QStringList());
const QStringList &bcc_addrs=QStringList(),bool dry_run=false);
bool RDSendMail(QString *err_msg,const QString &subject,const QString &body,
const QString &from_addr,const QString &to_addrs,
const QString &cc_addrs=QString(),
const QString &bcc_addrs=QString());
const QString &bcc_addrs=QString(),bool dry_run=false);
#endif // RDSENDMAIL

View File

@ -41,6 +41,7 @@ MainObject::MainObject(QObject *parent)
QString bcc_addrs;
QString subject;
QString body;
bool dry_run=false;
//
// Read Command Options
@ -73,6 +74,10 @@ MainObject::MainObject(QObject *parent)
body=cmd->value(i);
cmd->setProcessed(i,true);
}
if(cmd->key(i)=="--dry-run") {
dry_run=true;
cmd->setProcessed(i,true);
}
if(!cmd->processed(i)) {
fprintf(stderr,"sendmail_test: unknown option \"%s\"\n",
(const char *)cmd->key(i));
@ -80,7 +85,8 @@ MainObject::MainObject(QObject *parent)
}
}
if(!RDSendMail(&err_msg,subject,body,from_addr,to_addrs,cc_addrs,bcc_addrs)) {
if(!RDSendMail(&err_msg,subject,body,
from_addr,to_addrs,cc_addrs,bcc_addrs,dry_run)) {
fprintf(stderr,"%s\n",err_msg.toUtf8().constData());
exit(256);
}

View File

@ -23,7 +23,7 @@
#include <qobject.h>
#define SENDMAIL_TEST_USAGE "[options]\n\nTest the Rivendell email sending routines\n\nOptions are:\n--from-address=<addr>\n Originating email address\n\n--to-addresses=<addrs>\n To addresses (comma seperated)\n\n--cc-addresses=<addrs>\n CC addresses (comma seperated)\n\n--bcc-addresses=<addrs>\n BCC addresses (comma seperated)\n\n--subject=<str>\n Message subject\n\n--body=<str>\n Message body\n\n"
#define SENDMAIL_TEST_USAGE "[options]\n\nTest the Rivendell email sending routines\n\nOptions are:\n--from-address=<addr>\n Originating email address\n\n--to-addresses=<addrs>\n To addresses (comma seperated)\n\n--cc-addresses=<addrs>\n CC addresses (comma seperated)\n\n--bcc-addresses=<addrs>\n BCC addresses (comma seperated)\n\n--subject=<str>\n Message subject\n\n--body=<str>\n Message body\n\n--dry-run\n Print the raw message to STDOUT, then exit\n\n"
class MainObject : public QObject
{