return 0;
}
-int initsmtp(int *sockfd, const char *relayhost, unsigned short port)
+int initsmtp(int *sockfd, const char *relayhost, unsigned short port, const char *heloname)
{
int retval = 0;
int try_ehlo = 1;
char *reply = NULL;
- char *myhostname = hostnamestr();
do {
init_sockfd(sockfd, relayhost, port);
}
if (try_ehlo) {
- write_ehlo(*sockfd, myhostname);
+ write_ehlo(*sockfd, heloname);
if((reply = checkwait_smtpreply(*sockfd, MLMMJ_EHLO))
== NULL) {
/* EHLO successful don't try more */
*/
}
- write_helo(*sockfd, myhostname);
+ write_helo(*sockfd, heloname);
if((reply = checkwait_smtpreply(*sockfd, MLMMJ_HELO))
== NULL) {
/* EHLO successful don't try more */
} while (1);
- myfree(myhostname);
return retval;
}
char *mlmmjbounce = NULL, *bindir, *mailmap, *probefile, *a;
char *body = NULL, *hdrs = NULL, *memmailsizestr = NULL, *verp = NULL;
char relay[16], *listname, *listfqdn, *verpfrom, *maxverprecipsstr;
- char strindex[32], *reply, *strport, *requeuefilename;
+ char strindex[32], *reply, *strport, *smtphelo, *requeuefilename;
ssize_t memmailsize = 0;
DIR *subddir;
struct dirent *dp;
if(strport)
smtpport = (unsigned short)atol(strport);
+ if ((smtphelo = ctrlvalue(listdir, "smtphelo")) == NULL) {
+ smtphelo = hostnamestr();
+ }
+
switch(listctrl[0]) {
case '1': /* A single mail is to be sent */
case '6':
- initsmtp(&sockfd, relay, smtpport);
+ initsmtp(&sockfd, relay, smtpport, smtphelo);
if(send_mail(sockfd, bounceaddr, to_addr, replyto,
mailmap, st.st_size, listdir, NULL,
hdrs, hdrslen, body, bodylen)) {
}
break;
case '2': /* Moderators */
- initsmtp(&sockfd, relay, smtpport);
+ initsmtp(&sockfd, relay, smtpport, smtphelo);
if(send_mail_many_fd(sockfd, bounceaddr, NULL, mailmap,
st.st_size, subfd, NULL, NULL, NULL,
listdir, NULL, hdrs, hdrslen,
}
break;
case '3': /* resending earlier failed mails */
- initsmtp(&sockfd, relay, smtpport);
+ initsmtp(&sockfd, relay, smtpport, smtphelo);
if(send_mail_many_fd(sockfd, NULL, NULL, mailmap, st.st_size,
subfd, listaddr, listdelim, mailfilename,
listdir, mlmmjbounce, hdrs, hdrslen,
unlink(subfilename);
break;
case '4': /* send mails to owner */
- initsmtp(&sockfd, relay, smtpport);
+ initsmtp(&sockfd, relay, smtpport, smtphelo);
if(send_mail_many_fd(sockfd, bounceaddr, NULL, mailmap,
st.st_size, subfd, listaddr, listdelim,
mailfilename, listdir, mlmmjbounce,
}
break;
case '5': /* bounceprobe - handle relayhost local users bouncing*/
- initsmtp(&sockfd, relay, smtpport);
+ initsmtp(&sockfd, relay, smtpport, smtphelo);
if(send_mail(sockfd, bounceaddr, to_addr, replyto,
mailmap, st.st_size, listdir, NULL,
hdrs, hdrslen, body, bodylen)) {
}
if(verp) {
- initsmtp(&sockfd, relay, smtpport);
+ initsmtp(&sockfd, relay, smtpport, smtphelo);
if(sockfd > -1) {
if(write_mail_from(sockfd, verpfrom, verp)) {
log_error(LOG_ARGS,
}
}
if(stl.count == maxverprecips) {
- initsmtp(&sockfd, relay, smtpport);
+ initsmtp(&sockfd, relay, smtpport, smtphelo);
if(verp) {
sendres = send_mail_verp(
sockfd, &stl,
}
if(stl.count) {
- initsmtp(&sockfd, relay, smtpport);
+ initsmtp(&sockfd, relay, smtpport, smtphelo);
if(verp) {
sendres = send_mail_verp(sockfd, &stl, mailmap,
st.st_size, verpfrom, listdir,
munmap(mailmap, st.st_size);
close(mailfd);
myfree(verp);
+ myfree(smtphelo);
if(archive) {
if(!ctrlarchive) {