+ o php-user updates from Christoph Thiel
+ o Use Delivered-To: instead of To: when available
1.0.0-RC1
o Add web-interface. Thanks Christian Laursen for new perl-admin
o Dump the customheaders before any Mime headers
-README mlmmj-0.8.3 Aug 11th 2004
+README mlmmj-1.0.0-RC1 Aug 20th 2004
This is an attempt at implementing a mailing list manager with the same
functionality as the brilliant ezmlm, but with a decent license and mail server
independency.
-The functionality is not vast, but slowly improving:
+The functionality:
· Archive
· Custom headers / footer
· Subject prefix
· Subscribers only posting
· Regular expression access control
+ · Functionality to retrieve old posts
+ · Web-interface
To use mlmmj, do the following:
Further customization:
You can set two environment variables in your apache config to control the
-configuration of the mlmmj webinterface.
+configuration of the mlmmj webinterface. Remember to have mod_env loaded if
+you do this.
SetEnv CONFIG_PATH /home/mlmmj/conf/config.pl
SetEnv TUNABLES_PATH /home/mlmmj/conf/tunables.pl
Ehh, what's that?
The mlmmj-webinterface was created to give people the opportunity to
-{sub,unsub}scribe to your mailinglists without having to write an initial
-{sub,unsub}scribe-mail, but only completing a form.
+{sub,unsub}scribe to a mailinglists via a webinterface (without having to
+write an initial {sub,unsub}scribe-mail).
What are the requirements?
- Only a webserver, that has PHP >= 3.0.8 support.
+ You only need a webserver with PHP >= 3.0.8 support.
How can I install/use the webinterface?
- - Upload webinterface/mlmmj.php to your webserver.
- - Have a look at webinterface/example.html and copy one or both forms
- and put them into your website.
+ - Upload mlmmj.php to your webserver.
+ - Have a look at example.html and copy one or both forms
+ into your website.
- Adjust the options to satisfy your needs:
-
The mailinglist your want to {sub,unsub}scribe to:
- <input name="mailinglist" type="hidden" value="test@ct.kki.org">
+ <input name="mailinglist" type="hidden" value="mlmmj-test@example.org">
Do you want to subscribe or unsubscribe?
<input name="job" type="hidden" value="subscribe">
- Where do you want to redirect your user after a failure?
- <input name="redirect_failure" type="hidden" value="http://www.failure.com/">
+ Where do you want to redirect your user after a failure?
+ <input name="redirect_failure" type="hidden" value="http://www.failure.com/">
- What should be the success redirect?
- <input name="redirect_success" type="hidden" value="http://www.success.com/">
+ What should be the success redirect?
+ <input name="redirect_success" type="hidden" value="http://www.success.com/">
-That's it - have a fun!
+That's it - have a lot of fun!
Christoph Thiel <ct at kki dot org>
struct email_container toemails = { 0, NULL };
struct email_container ccemails = { 0, NULL };
struct email_container efromemails = { 0, NULL };
+ struct email_container dtoemails = { 0, NULL };
struct strlist *access_rules = NULL;
struct strlist *delheaders = NULL;
struct strlist allheaders;
{ "From:", 0, NULL },
{ "To:", 0, NULL },
{ "Cc:", 0, NULL },
- { "Return-Path: ", 0, NULL },
+ { "Return-Path:", 0, NULL },
+ { "Delivered-To:", 0, NULL },
{ NULL, 0, NULL }
};
}
}
- if(toemails.emaillist)
+ if(readhdrs[4].token) { /* Delivered-To: (envelope to) */
+ for(i = 0; i < readhdrs[4].valuecount; i++) {
+ find_email_adr(readhdrs[4].values[i], &dtoemails);
+ }
+ }
+
+ if(dtoemails.emaillist) {
+ recipdelim = strchr(dtoemails.emaillist[0], RECIPDELIM);
+ log_error(LOG_ARGS, "recipdelim = [%s]", recipdelim);
+ }
+ else if(toemails.emaillist)
recipdelim = strchr(toemails.emaillist[0], RECIPDELIM);
else
recipdelim = NULL;