mail_utils/mail: Reformat & fix a few error handling problems.
This commit is contained in:
parent
2037db1489
commit
83082f2e9c
@ -1,117 +1,118 @@
|
|||||||
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
/*
|
||||||
//
|
* Copyright 2003-2016, Haiku Inc. All rights reserved.
|
||||||
// Copyright (c) 2003, OpenBeOS
|
* Distributed under the terms of the MIT License.
|
||||||
//
|
*
|
||||||
// This software is part of the OpenBeOS distribution and is covered
|
* Authors:
|
||||||
// by the OpenBeOS license.
|
* Santiago (Jacques) Lema
|
||||||
//
|
* Jérôme Duval, jerome.duval@gmail.com
|
||||||
//
|
* Augustin Cavalier, <waddlesplash>
|
||||||
// File: mail.cpp
|
*/
|
||||||
// Author: Santiago (Jacques) Lema
|
|
||||||
// Description: sends an e-mail from the command-line
|
|
||||||
// Created : May 23, 2003
|
|
||||||
// Modified by: Jérome Duval
|
|
||||||
//
|
|
||||||
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <Application.h>
|
#include <Application.h>
|
||||||
#include <String.h>
|
#include <String.h>
|
||||||
#include <E-mail.h>
|
#include <E-mail.h>
|
||||||
|
|
||||||
#define APP_SIG "application/x-vnd.OBos-cmd-mail"
|
#include <stdio.h>
|
||||||
|
|
||||||
int main( int argc, char* argv[] )
|
|
||||||
|
#define APP_SIG "application/x-vnd.Haiku-mail_utils-mail"
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
BApplication mailApp(APP_SIG);
|
BApplication mailApp(APP_SIG);
|
||||||
|
|
||||||
// No arguments, show usage
|
// No arguments, show usage
|
||||||
if (argc==1) {
|
if (argc < 2) {
|
||||||
fprintf(stdout,"[OBOS-mail] Sorry: This program can only send mail, not read it.\n");
|
fprintf(stdout,"This program can only send mail, not read it.\n");
|
||||||
fprintf(stdout,"usage: /bin/mail [-v] [-s subject] [-c cc-addr] [-b bcc-addr] to-addr ...\n");
|
fprintf(stdout,"usage: %s [-v] [-s subject] [-c cc-addr] "
|
||||||
fflush(stdout);
|
"[-b bcc-addr] to-addr ...\n", argv[0]);
|
||||||
return B_OK;
|
fflush(stdout);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *subject = "No title";
|
char *subject = "No title";
|
||||||
char *cc = "";
|
char *cc = "";
|
||||||
char *bcc = "";
|
char *bcc = "";
|
||||||
BString to = "";
|
BString to = "";
|
||||||
BString body = "";
|
BString body = "";
|
||||||
|
|
||||||
bool verbose =false;
|
bool verbose =false;
|
||||||
//parse arguments
|
// Parse arguments
|
||||||
for (int i=1; i<argc; i++) {
|
for (int i = 1; i < argc; i++) {
|
||||||
if (strcmp (argv[i], "-v") == 0)
|
if (strcmp(argv[i], "-v") == 0)
|
||||||
verbose = true;
|
verbose = true;
|
||||||
else if (strcmp(argv[i], "-s") == 0) {
|
else if (strcmp(argv[i], "-s") == 0) {
|
||||||
subject = argv[i+1];
|
subject = argv[i+1];
|
||||||
i++;
|
i++;
|
||||||
} else if (strcmp(argv[i], "-c") == 0) {
|
} else if (strcmp(argv[i], "-c") == 0) {
|
||||||
cc = argv[i+1];
|
cc = argv[i+1];
|
||||||
i++;
|
i++;
|
||||||
} else if (strcmp(argv[i], "-b") == 0) {
|
} else if (strcmp(argv[i], "-b") == 0) {
|
||||||
bcc = argv[i+1];
|
bcc = argv[i+1];
|
||||||
i++;
|
i++;
|
||||||
} else {
|
} else {
|
||||||
to.Append(argv[i]);
|
to.Append(argv[i]);
|
||||||
if (i < argc - 1)
|
if (i < argc - 1)
|
||||||
to.Append(" ");
|
to.Append(" ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (verbose) {
|
if (verbose) {
|
||||||
fprintf(stdout,"\n");
|
fprintf(stdout, "\n");
|
||||||
fprintf(stdout,"To:\t<%s> \n",to.String());
|
fprintf(stdout, "To:\t<%s> \n", to.String());
|
||||||
fprintf(stdout,"Cc:\t<%s> \n",cc);
|
fprintf(stdout, "Cc:\t<%s> \n", cc);
|
||||||
fprintf(stdout,"Bcc:\t<%s> \n",bcc);
|
fprintf(stdout, "Bcc:\t<%s> \n", bcc);
|
||||||
fprintf(stdout,"Subj:\t<%s> \n",subject);
|
fprintf(stdout, "Subj:\t<%s> \n", subject);
|
||||||
fprintf(stdout,"Body:\t<%s> \n",body.String());
|
fprintf(stdout, "Body:\t<%s> \n", body.String());
|
||||||
fprintf(stdout,"\n");
|
fprintf(stdout, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
//check if valid recipients
|
|
||||||
if (strcmp(to.String(), "") == 0
|
|
||||||
&& strcmp(cc, "") == 0
|
|
||||||
&& strcmp(bcc, "") == 0) {
|
|
||||||
|
|
||||||
fprintf(stdout,
|
|
||||||
"[Error]\nYou must specify at least one recipient in to,cc or bcc fields.\n");
|
|
||||||
return B_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
//read each line until we get a single dot "." on a line
|
|
||||||
char line[32768] = "";
|
|
||||||
|
|
||||||
printf("Now type your message.\nType '.' alone on a line to send it.\n");
|
// Check if recipients are valid
|
||||||
do {
|
if (strcmp(to.String(), "") == 0 &&
|
||||||
|
strcmp(cc, "") == 0 &&
|
||||||
|
strcmp(bcc, "") == 0) {
|
||||||
|
|
||||||
|
fprintf(stdout, "[Error]: You must specify at least one recipient "
|
||||||
|
"in to, cc or bcc fields.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read each line until we get a single dot "." on a line
|
||||||
|
char line[32768] = "";
|
||||||
|
|
||||||
|
printf("Now type your message.\nType '.' alone on a line to send it.\n");
|
||||||
|
do {
|
||||||
gets(line);
|
gets(line);
|
||||||
|
|
||||||
if (strcmp(line, ".") != 0) {
|
if (strcmp(line, ".") != 0) {
|
||||||
body.Append(line).Append("\n");
|
body.Append(line).Append("\n");
|
||||||
}
|
}
|
||||||
//fprintf(stdout,"Line: %s \n",line);
|
// fprintf(stdout,"Line: %s \n",line);
|
||||||
} while (strcmp(line, ".") != 0);
|
} while (strcmp(line, ".") != 0);
|
||||||
|
|
||||||
|
|
||||||
if (verbose)
|
if (verbose)
|
||||||
fprintf(stdout, "\nBody:\n%s\n", body.String());
|
fprintf(stdout, "\nBody:\n%s\n", body.String());
|
||||||
|
|
||||||
if (verbose)
|
if (verbose)
|
||||||
fprintf(stdout, "\nSending E-mail...\n");
|
fprintf(stdout, "\nSending E-mail...\n");
|
||||||
|
|
||||||
|
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
|
||||||
BMailMessage mail;
|
BMailMessage mail;
|
||||||
mail.AddHeaderField(B_MAIL_TO, to.String());
|
mail.AddHeaderField(B_MAIL_TO, to.String());
|
||||||
mail.AddHeaderField(B_MAIL_CC, cc);
|
mail.AddHeaderField(B_MAIL_CC, cc);
|
||||||
mail.AddHeaderField(B_MAIL_BCC, bcc);
|
mail.AddHeaderField(B_MAIL_BCC, bcc);
|
||||||
mail.AddHeaderField(B_MAIL_SUBJECT, subject);
|
mail.AddHeaderField(B_MAIL_SUBJECT, subject);
|
||||||
mail.AddContent(body.String(),strlen(body.String()));
|
mail.AddContent(body.String(), strlen(body.String()));
|
||||||
status_t result = mail.Send();
|
status_t result = mail.Send();
|
||||||
|
|
||||||
if (result==B_OK)
|
if (result == B_OK) {
|
||||||
fprintf(stdout, "\nMessage was sent successfully.\n");
|
fprintf(stdout, "\nMessage was sent successfully.\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stdout, "Message failed to send: %s", strerror(result));
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user