00001
00002
00003
#include <sys/types.h>
00004
#include "main.h"
00005
#include <pwd.h>
00006
#include <stdlib.h>
00007
#include <unistd.h>
00008
00009
#include <qtextstream.h>
00010
00011
#include <kapplication.h>
00012
#include <kemailsettings.h>
00013
#include <klocale.h>
00014
#include <kcmdlineargs.h>
00015
#include <kaboutdata.h>
00016
#include <kdebug.h>
00017
#include <kconfig.h>
00018
00019
#include "smtp.h"
00020
00021
static KCmdLineOptions options[] = {
00022 {
"subject <argument>",
I18N_NOOP(
"Subject line"), 0 },
00023 {
"recipient <argument>",
I18N_NOOP(
"Recipient"),
"submit@bugs.kde.org" },
00024 KCmdLineLastOption
00025 };
00026
00027
void BugMailer::slotError(
int errornum) {
00028
kdDebug() <<
"slotError\n";
00029
QString str, lstr;
00030
00031
switch(errornum) {
00032
case SMTP::CONNECTERROR:
00033 lstr = i18n(
"Error connecting to server.");
00034
break;
00035
case SMTP::NOTCONNECTED:
00036 lstr = i18n(
"Not connected.");
00037
break;
00038
case SMTP::CONNECTTIMEOUT:
00039 lstr = i18n(
"Connection timed out.");
00040
break;
00041
case SMTP::INTERACTTIMEOUT:
00042 lstr = i18n(
"Time out waiting for server interaction.");
00043
break;
00044
default:
00045 lstr = sm->getLastLine().
stripWhiteSpace();
00046 lstr = i18n(
"Server said: \"%1\"").
arg(lstr);
00047 }
00048 fputs(lstr.
utf8().data(), stdout);
00049 fflush(stdout);
00050
00051 ::exit(1);
00052 }
00053
00054
void BugMailer::slotSend() {
00055
kdDebug() <<
"slotSend\n";
00056 ::exit(0);
00057 }
00058
00059
int main(
int argc,
char **argv) {
00060
00061
KLocale::setMainCatalogue(
"kdelibs");
00062
KAboutData d(
"ksendbugmail",
I18N_NOOP(
"KSendBugMail"),
"1.0",
00063
I18N_NOOP(
"Sends a short bug report to submit@bugs.kde.org"),
00064 KAboutData::License_GPL,
"(c) 2000 Stephan Kulow");
00065 d.addAuthor(
"Stephan Kulow",
I18N_NOOP(
"Author"),
"coolo@kde.org");
00066
00067
KCmdLineArgs::init(argc, argv, &d);
00068
KCmdLineArgs::addCmdLineOptions(options);
00069
KCmdLineArgs *args =
KCmdLineArgs::parsedArgs();
00070
00071
KApplication a(
false,
false);
00072
00073
QCString recipient = args->
getOption(
"recipient");
00074
if (recipient.
isEmpty())
00075 recipient =
"submit@bugs.kde.org";
00076
else {
00077
if (recipient.at(0) ==
'\'') {
00078 recipient = recipient.
mid(1).left(recipient.
length() - 2);
00079 }
00080 }
00081
kdDebug() <<
"recp \"" << recipient <<
"\"\n";
00082
00083
QCString subject = args->
getOption(
"subject");
00084
if (subject.
isEmpty())
00085 subject =
"(no subject)";
00086
else {
00087
if (subject.at(0) ==
'\'')
00088 subject = subject.
mid(1).left(subject.
length() - 2);
00089 }
00090
QTextIStream input(stdin);
00091
QString text, line;
00092
while (!input.eof()) {
00093 line = input.readLine();
00094 text += line +
"\r\n";
00095 }
00096
kdDebug() << text <<
endl;
00097
00098
KEMailSettings emailConfig;
00099 emailConfig.
setProfile(emailConfig.
defaultProfileName());
00100
QString fromaddr = emailConfig.
getSetting(KEMailSettings::EmailAddress);
00101
if (!fromaddr.
isEmpty()) {
00102
QString name = emailConfig.
getSetting(KEMailSettings::RealName);
00103
if (!
name.
isEmpty())
00104 fromaddr =
name +
QString::fromLatin1(
" <") + fromaddr +
QString::fromLatin1(
">");
00105 }
else {
00106
struct passwd *p;
00107 p = getpwuid(getuid());
00108 fromaddr =
QString::fromLatin1(p->pw_name);
00109 fromaddr +=
"@";
00110
char buffer[256];
00111 buffer[0] =
'\0';
00112
if(!gethostname(buffer,
sizeof(buffer)))
00113 buffer[
sizeof(buffer)-1] =
'\0';
00114 fromaddr += buffer;
00115 }
00116
kdDebug() <<
"fromaddr \"" << fromaddr <<
"\"" <<
endl;
00117
00118
QString server = emailConfig.
getSetting(KEMailSettings::OutServer);
00119
if (server.
isEmpty())
00120 server=
QString::fromLatin1(
"bugs.kde.org");
00121
00122 SMTP *sm =
new SMTP;
00123 BugMailer bm(sm);
00124
00125
QObject::connect(sm, SIGNAL(messageSent()), &bm, SLOT(slotSend()));
00126
QObject::connect(sm, SIGNAL(error(
int)), &bm, SLOT(slotError(
int)));
00127 sm->setServerHost(server);
00128 sm->setPort(25);
00129 sm->setSenderAddress(fromaddr);
00130 sm->setRecipientAddress(recipient);
00131 sm->setMessageSubject(subject);
00132 sm->setMessageHeader(QString::fromLatin1(
"From: %1\r\nTo: %2\r\n").arg(fromaddr).arg(recipient));
00133 sm->setMessageBody(text);
00134 sm->sendMessage();
00135
00136
int r = a.exec();
00137
kdDebug() <<
"execing " << r <<
endl;
00138
delete sm;
00139
return r;
00140 }
00141
00142
#include "main.moc"