Hiya Matt,

Sorry about the long time reply thank you for the detailed information.

About the generic mailet, I did read the GitHub version of it 
https://github.com/apache/james-project/blob/master/mailet/base/src/main/java/org/apache/mailet/base/GenericMailet.java
 and in the comment it did say the same thing about the Super.init(Config) so I 
apologize for my lack of attention. Thank you also for pointing out the SLF4J 
part, I will look more into that and for the java file, I already commented out 
the log() and the init(), destroy(), and getMailetInfo() function so only 
service(mail) left.

Also about the mailet naming thing, i ask for apology about that since my 
friend who set-up the file last time name it like that and I was afraid to 
change thinking it would corrupt the system since I still learning how the 
apache ANT compile works, so I dare not take any chances , but we sorted it out 
and changed the name.

Also sorry about the miscommunication, as I did write my class name like this 
in the mailetcontainer.xml (I was writing the class name as an example of a 
name, I should;ve the real class name, brain being derpy) : 

164 <!-- Send remaining mails to the transport processor for either local or 
remote delivery --> Line 
165        <mailet match="All" class="com.test.CustomMeiletTest"/>
166        <mailet match="All" class="ToProcessor">
167          <processor>transport</processor>
168             </mailet>

About the log doesn’t have the "wrapper stopped" I guess it doesn’t have that 
because I already make james run as a service , it will run continuously even 
though it failed and never “stopped”. So I did stop the service and run it 
using “james start” to see the error but turn out the problem was solved and my 
log finally showed up. (For the log4j.properties, I activate the debug one)

INFO  06:20:09,272 | com.test.CustomMeiletTest | Log via slf4j with INFO level 
!!! Add log4j.logger.com.test=INFO, CONS, FILE in the log4j.properties
DEBUG 06:20:09,272 | com.test.CustomMeiletTest | Log via slf4j with DEBUG level 
!!! Add log4j.logger.com.test=DEBUG, CONS, FILE in the log4j.properties
INFO  06:20:09,272 | com.test.CustomMeiletTest | This will show up at Logger if 
done correctly!

So I deeply thank you for the help and response and the patience to help me, 
there;s still a lot about james that I need to learn. I can finally have some 
progress to have mailet for signing DKIM and SPF.

P.S : I notice some strange log from my log like someone trying to login to my 
server multiple times, upon some quick search, its called AUTH LOGIN attack I 
think. Probably gonna look more into it first.

INFO  08:13:15,280 | 
org.apache.james.protocols.netty.BasicChannelUpstreamHandler | Connection 
established from 185.137.111.188
ERROR 08:13:15,348 | org.apache.james.protocols.api.handler.CommandHandler | 
AUTH method LOGIN failed from rut...@107.jp@185.137.111.188
INFO  08:13:15,364 | 
org.apache.james.protocols.netty.BasicChannelUpstreamHandler | Connection 
closed for 185.137.111.188 

Sorry for any wrong word, and thank you for the help.

Sincerely, Jason

Sent from Mail for Windows 10

From: cryptearth
Sent: Thursday, July 4, 2019 4:44 PM
To: server-user@james.apache.org
Subject: Re: About Custom Mailet Configuration

Hey Jason,

have a look at the doc, I supply it on my server (sorry for no-frame 
support - security header stuff set by apache config): 
https://cryptearth.de/~cryptearth/doc/org/apache/mailet/base/GenericMailet.html

The doc says this:

init(MailetConfig): "When overriding this form of the method, call 
super.init(config)."
You're using your own private field MailetConfig config - this cause 
errors as you shadow the private field MailetConfig config in 
super-class GenericMailet - wich then is "null" when used in other calls.
So, if you override init(MailetConfig) itself it is important that the 
first line in it has to be "super.init(config)" to set the config field 
in the super class. Also: don't add a field with type MailetConfig and 
name "config" in your class as this shadow the super field. the better 
way is you don't override init(MailetConfig) but only init().

Also: The doc says, that GenericMailet.log(String) and 
GenericMailet.log(String, Throwable) are deprecated and you should use 
SLF4J. So, this is how your sample should look like:

package com.test;
import javax.mail.MessagingException;
import org.apache.mailet.Mail;
import org.apache.mailet.base.GenericMailet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyMailet extends GenericMailet{
  private static final Logger logger = 
LoggerFactory.getLogger(MyMailet.class);
  @Override
  public void service(Mail mail) throws MessagingException {
    // log("log via mailet logger with INFO level"); // no longer use 
this line as log(String) is deprecated
    logger.info("Log via slf4j with INFO level !!! Add 
log4j.logger.com.test=INFO, CONS, FILE in the log4j.properties");
    logger.debug("Log via slf4j with DEBUG level !!! Add 
log4j.logger.com.test=DEBUG, CONS, FILE in the log4j.properties");
  }
}

That's all, fin. No private config field, no override init() - no log() 
method - just the Logger instance and an info() and a debug().

About log levels: From the top of my head I think about four: debug, 
info, warn, error. If you set your log-level to debug, you get anything, 
if you set it only to info or warn you will get way less. I don't try to 
say you can'T use both, but as the file is named ".properties" I can 
almost asure you it uses java.util.Properties.load(), wich (IIRC) only 
parses the first or the last line. So, it you have to lines with key 
"log4j.logger.com.test" you will only get ONE of them (check the docs if 
it's the first or the last one). So you can only use one of them.
For more info about log level and how to use them please ask google and 
look up the doc and the site of slf4j and log4j.

Your config doesn't match with your class. You called your class: 
com.test.CustomMeiletTest (btw: mailet comes from mail - and is therefor 
written with an A, not with an E) but your config is given: 
com.test.CustomMeiletTestClassName - this is wrong. If you give a 
classname it has to exactly match. If you have a class called 
"CustomMeiletTest" in the package "com.test" then that's 
"com.test.CustomMeiletTest" - "com.test.CustomMeiletTestClassName" would 
be a class called "CustomMeiletTestClassName". This is basic java you 
have to obey. No way around it.

The error log you posted look still in-complete. it should end with a 
line some like "wrapper stopped" or something like this. It still ends 
the same where the one you posted already as mail - not helpful.



Last thing: I'm not the one to judge, but header says "X-MimeOLE: 
Produced By Microsoft MimeOLE V6.1.7601.24158" (that's outlook express 
on windows 7 SP1) and "jasonxc...@yahoo.com.INVALID" - so you obvious 
somehow use a yahoo mail account with outlook express? IDC, I just 
spotted it by looking for some hint about your attachements, it just 
looks not right. Don't worry as long as it works (my james would simple 
reject it as it would mark ".INVALID" as spam).

So long,

Matt

Reply via email to