Hello Matt, So as far as I understand your main need would be:
``` WHEN I send an email THEN it is stored in *myMagicRecipient* INBOX Regardless of original recipients ``` Quite surprisingly such a "Overwrite envelop" feature is missing... Here is the JIRA: https://issues.apache.org/jira/browse/MAILET-163 Don't hesitate to PR this ;-) (Combined with a "not RemoteHostIs" you would achieve the rewritting you need) Cheers, Benoit TELLIER On 1/30/19 4:13 PM, cryptearth wrote: > Hello Benoit, > > let me try to re-phrase my goal: > > I've set up a clean install of opensuse 15.0 on my test-rig, named it > glados, assigned it to my domain cryptearth.de, set sendmail as > nullclient along with james 3.2.0 and want to collect any mail dropped > by sendmail into a specific mailbox. The catch: As I also want to use > sendmail to support mail() command for php, e-mails dropped in by > apache should be routed extern. > > So: sendmail dropps in mails depending on wich service calls it. Cron > for example uses gla...@glados.cryptearth.de - apache instead > wwwrun@localhost - and my guess is that other services might use other > combinations as well. > > Goal: When a mail is dropped by apache, wich is set to > webmas...@cryptearth.de by using -f parameter in php.ini, these mails > should go out as normal to they recipient. Any other mail should get > collected into a special user, for example > local-servi...@cryptearth.de or so. > > What I disconvered yet: When the domain wich is used by sendmail is > not in the domain-list, james thinks it's an external domain and tries > remote delivery. If the domain is in the domain-list, but not the user > name - it fast fails to "no user". And if the user for the domain is > also added it gets delivered into inbox without double in sent. It's > that last one I want, but without adding any specific user for each > services wich may use sendmail to try to local-deliver status-mails, > wich sendmail usual would drop into /var/mail or ~/mail (or what ever > it is default to). > > I dug through mailets and recipient rewrite and got some hints, but > couldn't figure out some working yet. One think I come up with is add > some to mailetcontainer wich re-writes recipient based on remote-host, > wich for sendmail is localhost. Other idea I had: use some > re-write-rule based on local hostname, but you recommended against > using this way. > > Another possible what someone come up with: add my own few lines into > source and re-build - but I don't know where to add as it's all very > abstract and I'm not that pro of Java. > > Thanks to anyone in advance, > > Matt > > Am 30.01.2019 um 05:15 schrieb Benoit Tellier: >> Hi Matt, >> >> I read the all thread but feel quite confuse about what you try to >> achieve. >> >> Could you describe it again? (`When ... Then ...` syntax can really >> help!) >> >> Don't be using regex rewrites - I guess nobody understand what it does. >> >> Maybe you are interested by domain rewrites? Or do you want that all >> mail received, whatever the recipient, goes to the same mailbox? >> >> Cheers, >> >> Benoit TELLIER >> >> On 1/28/19 9:57 AM, cryptearth wrote: >>> Hey there, Matt here again. >>> >>> So, I think a found a possible solution without any source-file mods >>> but >>> only clever mailet-config in mailetcontainer.xml. >>> >>> As I dug through the source I found the standard mailets for >>> RecipientIsLocal. Then I found RecipientIsRegex (I might need some help >>> here). Also there is something called RewriteTable. >>> >>> I set up a fresh opensuse leap 15 - cron sends mails as >>> <user>@<hostname>.<domain> - so I set up a small test-script and looked >>> at log while running james in console mode: when the domainlist doesn't >>> contain <hostname>.<domain> but only <domain> james thinks that >>> <hostname>.<domain> is external and tries RemoteDelivery. So I added >>> <hostname>.<domain> to domainlist. As I just had the domain, but not >>> the >>> user, the mail is denied as user doesn't exists for the domain. When I >>> add the user as <localuser>@<hostname>.<domain> it gets local delivered >>> without additional copy in sent folder. So as I don't want to set up a >>> user for each localuser, but also want to avoid fastfail I come up >>> with: >>> What if I could early check for <whatever>@<hostname>.<domain> and >>> could >>> just re-write it to an existing account in form of <user>@<domain>? >>> When >>> recipient is re-written before RecipientIsLocal is checked, then this >>> should trigger and just deliver any local mail from what ever >>> service to >>> the mailbox I want to. >>> >>> So I search through the source tree - but couldn't find anything to >>> alter the recipient by mailet. All I found was the >>> recipientrewritetable.xml file and the AddRegexMapping command >>> available >>> in james-cli.sh. The xml-config doesn't seem to help, but the >>> AddRegexMapping command looks good, but I don't understand the command >>> parameters: >>> >>> AddRegexMapping <user> <domain> <regex> >>> >>> Can someone get me some hint how to use this command? Or where/how I >>> can >>> setup the recipient-rewrite before RecipientIsLocal is checked? >>> >>> Thanks in advance, >>> >>> Matt >>> >>> Am 27.01.2019 um 15:20 schrieb cryptearth: >>>> So, as far as I dug through the code, it seems to come down to >>>> MailetContext.isLocalEmail(MailAddress) wich is checked by >>>> RecipientIsLocal (wich I guess also involve somehow a check of >>>> isLocalServer(Domain). In transport-processor there is the line >>>> >>>> <mailet match="RecipientIsLocal" class="LocalDelivery" /> >>>> >>>> I looked into LocalDelivery.java, but I guess when this matches it's >>>> to late to perform the test I want to about where the mail comes from >>>> and where it should send. JamesMailetContext looks good, as it >>>> contains isLocalServer(Domain), wich should also used to check >>>> SenderIsLocal (wich shouldn't matter, as this test is performed by >>>> source 127.0.0.1). As far as I yet could identify, it all comes down >>>> to somehow tell the config, that whatever domain sendmail uses (it's >>>> either hostname or hostname.domain) is considered as localServer. The >>>> wild-card alias shouldn't be any harder to find or figure out as I >>>> simply have to rewrite anything that comes from local and is for >>>> local, but isn't in localUserList, is re-written to whatever address I >>>> want. >>>> >>>> I'll report back when I found the lines to alter. >>>> >>>> Matt >>>> >>>> Am 26.01.2019 um 22:57 schrieb cryptearth: >>>>> Currently I'm just using out-of-the-box after clean build. I'll have >>>>> a look at the mentioned class and the mailetcontainer. Maybe I'll >>>>> find my way around. Good James is written in Java - the one language >>>>> I really know. >>>>> >>>>> Thanks for the point in a possible direction. I'll report back when I >>>>> got something usefull. >>>>> >>>>> Matt >>>>> >>>>> ---- Garry Hurley schrieb ---- >>>>> >>>>> Matt, are you using a custom mailet, or working out of the box? Take >>>>> a look at the source for LocalDelivery.java >>>>> <http://LocalDelivery.java>, and the configuration for local mail in >>>>> your mailetcontainer.xml <http://mailetcontainer.xml> file. You may >>>>> have to override some functionality to get the processing you want. >>>>> >>>>> Sent from my iPhone >>>>> >>>>>> On Jan 26, 2019, at 9:36 AM, cryptearth <cryptea...@cryptearth.de >>>>> <mailto:cryptea...@cryptearth.de>> wrote: >>>>>> Hey there, Matt here. >>>>>> >>>>>> So I got sendmail working with james now (tried postfix, but it >>>>> always complains forwarding to localhost isn't supported as there is >>>>> no option to ignore false loopback detection), and when used from >>>>> apache with additional -f parameter all works good. But as there're >>>>> other services might drop mail into local queue (crontab specificly) >>>>> I noticed, that I'm still missing something. My goal is somesort of >>>>> wildcard alias so that no matter from wich user sendmail gets a >>>>> message, except the one I use for apache, it should redirect them >>>>> internally to one of the user-accounts inside james itself. I guess >>>>> there would be a simple solution if would like all mails to get >>>>> forwareded, but I don't think there is a blacklist syntax so that >>>>> mails from specific services with non-local recipients got send out. >>>>>> Currently I'm using 3.2.0 <tel:3.2.0> final release commit. I also >>>>> looked into the mailetcontainer.xml <http://mailetcontainer.xml> file >>>>> and I guess it's possible in there to specify this rule: >>>>>> redirect anything local, except address set in apache config, to >>>>> user X, otherwise when from apache with non-local target -> transport >>>>>> Could anyone maybe give me a hint? >>>>>> Other solution: redirect anything local from sendmail to processing >>>>> and with another task process the mails like some short lines of >>>>> additional Java. >>>>>> Matt >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: server-user-unsubscr...@james.apache.org >>>>> <mailto:server-user-unsubscr...@james.apache.org> >>>>> For additional commands, e-mail: server-user-h...@james.apache.org >>>>> <mailto:server-user-h...@james.apache.org> >>>>> >>>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: server-user-unsubscr...@james.apache.org >>> For additional commands, e-mail: server-user-h...@james.apache.org >>> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: server-user-unsubscr...@james.apache.org >> For additional commands, e-mail: server-user-h...@james.apache.org >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: server-user-unsubscr...@james.apache.org > For additional commands, e-mail: server-user-h...@james.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: server-user-unsubscr...@james.apache.org For additional commands, e-mail: server-user-h...@james.apache.org