masukomi / aspirin Goto Github PK
View Code? Open in Web Editor NEWAspirin is an embeddable send-only SMTP server.
Aspirin is an embeddable send-only SMTP server.
http://mvnrepository.com/artifact/org.masukomi/aspirin/0.11.01
Where is SimpleMimeMessageGenerator? To obtain a default message wtih getNewMimeMessage?
Hi.
I have a strange problem, if I create 2x messages with different to to addresses and send them with Aspirin they are sent very quickly.
If I create 1 email with 2 people in the to list it always takes longer to send.
It appears the QueManager goes into a 1 minute sleep.
See the log message "There is no sendable item in the queue. Fallback to waiting state for a minute."
If I add more addresses it takes longer and longer.
Below is the log output. There is no failed connection to the server, which I have seen with some email servers refusing connections if we send too many emails too fast.
14:10:00,467 DEBUG Aspirin:77 - MailQue.service(): Remotely delivering mail javax.mail.internet.MimeMessage@1818f80 14:10:00,471 INFO Aspirin:136 - QueManager.run(): QueManager started. 14:10:00,472 TRACE Aspirin:289 - QuedItem (javax.mail.internet.MimeMessage@1818f80).isCompleted(): S0+F0/A2 14:10:00,472 TRACE Aspirin:179 - MailQue.getNextSendable(): Maintenance of MailQue - removed 0 items from 1 14:10:00,472 TRACE Aspirin:187 - MailQue.getNextSendable(): Found item to send. qi=QuedItem [id=javax.mail.internet.MimeMessage@1818f80; status=0; ]; 14:10:00,472 DEBUG Aspirin:150 - QueManager.run(): Start delivery. qi=QuedItem [id=javax.mail.internet.MimeMessage@1818f80; status=1; ]; 14:10:00,479 TRACE Aspirin:49 - GenericPoolableRemoteDeliveryFactory.makeObject(): New RemoteDelivery object created: RemoteDelivery-1 14:10:00,480 TRACE Aspirin:155 - QueManager.run(): Borrow RemoteDelivery object. rd=RemoteDelivery-1 14:10:00,480 TRACE Aspirin:156 - QueManager.run(): Pool state. A1/I0 14:10:00,481 TRACE Aspirin:677 - RemoteDelivery (RemoteDelivery-1).setQuedItem(): Item was set. qi=QuedItem [id=javax.mail.internet.MimeMessage@1818f80; status=1; ]; 14:10:00,481 TRACE Aspirin:289 - QuedItem (javax.mail.internet.MimeMessage@1818f80).isCompleted(): S0+F0/A2 14:10:00,481 TRACE Aspirin:179 - MailQue.getNextSendable(): Maintenance of MailQue - removed 0 items from 1 14:10:00,481 TRACE Aspirin:178 - QueManager.run(): There is no sendable item in the queue. Fallback to waiting state for a minute. 14:10:00,481 TRACE Aspirin:585 - RemoteDelivery (RemoteDelivery-1).run(): Call delivering... qi=QuedItem [id=javax.mail.internet.MimeMessage@1818f80; status=1; ]; 14:10:00,482 DEBUG Aspirin:170 - RemoteDelivery (RemoteDelivery-1).deliver(): Starting mail delivery. qi=QuedItem [id=javax.mail.internet.MimeMessage@1818f80; status=1; ]; 14:10:00,586 TRACE Aspirin:231 - RemoteDelivery (RemoteDelivery-1).deliver(): 1 servers found for ptc.com. 14:10:00,586 DEBUG Aspirin:252 - RemoteDelivery (RemoteDelivery-1).deliver(): Attempting delivery of javax.mail.internet.MimeMessage@1818f80 to host smtp://int-mail.ptc.com to addresses [[email protected]] 14:10:01,277 DEBUG Aspirin:309 - RemoteDelivery (RemoteDelivery-1).deliver(): Mail (javax.mail.internet.MimeMessage@1818f80) sent successfully to smtp://int-mail.ptc.com 14:10:01,278 TRACE Aspirin:289 - QuedItem (javax.mail.internet.MimeMessage@1818f80).isCompleted(): S1+F0/A2 14:10:01,278 TRACE Aspirin:289 - QuedItem (javax.mail.internet.MimeMessage@1818f80).isCompleted(): S1+F0/A2 14:10:01,278 TRACE Aspirin:206 - QuedItem.release(): Item released. qi=QuedItem [id=javax.mail.internet.MimeMessage@1818f80; status=0; ]; 14:10:01,278 TRACE Aspirin:602 - RemoteDelivery (RemoteDelivery-1).run(): Release item. qi=QuedItem [id=javax.mail.internet.MimeMessage@1818f80; status=0; ]; 14:10:01,278 INFO Aspirin:611 - RemoteDelivery (RemoteDelivery-1).run(): Try to give back RemoteDelivery object into the pool. 14:10:01,279 TRACE Aspirin:623 - RemoteDelivery (RemoteDelivery-1).run(): Wait for next sendable item. 14:11:00,484 TRACE Aspirin:289 - QuedItem (javax.mail.internet.MimeMessage@1818f80).isCompleted(): S1+F0/A2 14:11:00,484 TRACE Aspirin:179 - MailQue.getNextSendable(): Maintenance of MailQue - removed 0 items from 1 14:11:00,484 TRACE Aspirin:187 - MailQue.getNextSendable(): Found item to send. qi=QuedItem [id=javax.mail.internet.MimeMessage@1818f80; status=0; ]; 14:11:00,484 DEBUG Aspirin:150 - QueManager.run(): Start delivery. qi=QuedItem [id=javax.mail.internet.MimeMessage@1818f80; status=1; ]; 14:11:00,484 TRACE Aspirin:155 - QueManager.run(): Borrow RemoteDelivery object. rd=RemoteDelivery-1 14:11:00,485 TRACE Aspirin:156 - QueManager.run(): Pool state. A1/I0 14:11:00,485 TRACE Aspirin:677 - RemoteDelivery (RemoteDelivery-1).setQuedItem(): Item was set. qi=QuedItem [id=javax.mail.internet.MimeMessage@1818f80; status=1; ]; 14:11:00,485 TRACE Aspirin:585 - RemoteDelivery (RemoteDelivery-1).run(): Call delivering... qi=QuedItem [id=javax.mail.internet.MimeMessage@1818f80; status=1; ]; 14:11:00,485 TRACE Aspirin:289 - QuedItem (javax.mail.internet.MimeMessage@1818f80).isCompleted(): S1+F0/A2 14:11:00,485 DEBUG Aspirin:170 - RemoteDelivery (RemoteDelivery-1).deliver(): Starting mail delivery. qi=QuedItem [id=javax.mail.internet.MimeMessage@1818f80; status=1; ]; 14:11:00,485 TRACE Aspirin:179 - MailQue.getNextSendable(): Maintenance of MailQue - removed 0 items from 1 14:11:00,488 TRACE Aspirin:178 - QueManager.run(): There is no sendable item in the queue. Fallback to waiting state for a minute. 14:11:00,488 TRACE Aspirin:231 - RemoteDelivery (RemoteDelivery-1).deliver(): 1 servers found for ptc.com. 14:11:00,488 DEBUG Aspirin:252 - RemoteDelivery (RemoteDelivery-1).deliver(): Attempting delivery of javax.mail.internet.MimeMessage@1818f80 to host smtp://int-mail.ptc.com to addresses [[email protected]] 14:11:01,183 DEBUG Aspirin:309 - RemoteDelivery (RemoteDelivery-1).deliver(): Mail (javax.mail.internet.MimeMessage@1818f80) sent successfully to smtp://int-mail.ptc.com 14:11:01,183 TRACE Aspirin:289 - QuedItem (javax.mail.internet.MimeMessage@1818f80).isCompleted(): S2+F0/A2 14:11:01,183 TRACE Aspirin:289 - QuedItem (javax.mail.internet.MimeMessage@1818f80).isCompleted(): S2+F0/A2 14:11:01,184 TRACE Aspirin:206 - QuedItem.release(): Item released. qi=QuedItem [id=javax.mail.internet.MimeMessage@1818f80; status=3; ]; 14:11:01,184 TRACE Aspirin:602 - RemoteDelivery (RemoteDelivery-1).run(): Release item. qi=QuedItem [id=javax.mail.internet.MimeMessage@1818f80; status=3; ]; 14:11:01,184 INFO Aspirin:611 - RemoteDelivery (RemoteDelivery-1).run(): Try to give back RemoteDelivery object into the pool. 14:11:01,184 TRACE Aspirin:623 - RemoteDelivery (RemoteDelivery-1).run(): Wait for next sendable item.
Since JDK8 Javadocs has become very strict:
Otherwise Javadocs generation fails.
I try to run all test and doesn't understand one thing.
MailQueTest test failed on last assertion:
assertTrue(que.getQueueSize() == 0);
Mail was successfully send, received and checked on server, but queue is not empty.
In log is this:
17:59:57.585 [Aspirin-QueManager-9] INFO MailService - QueManager.run(): QueManager started.
17:59:57.586 [Aspirin-QueManager-9] DEBUG MailService - QueManager.run(): Start delivery. qi=QuedItem [id=javax.mail.internet.MimeMessage@132e13d; status=1; ];
17:59:57.594 [RemoteDelivery-1] DEBUG MailService - RemoteDelivery (RemoteDelivery-1).deliver(): Starting mail delivery. qi=QuedItem [id=javax.mail.internet.MimeMessage@132e13d; status=1; ];
18:00:02.716 [RemoteDelivery-1] DEBUG MailService - RemoteDelivery (RemoteDelivery-1).deliver(): Attempting delivery of javax.mail.internet.MimeMessage@132e13d to host smtp://aspmx.l.google.com to addresses [[email protected]]
18:00:06.442 [RemoteDelivery-1] DEBUG MailService - RemoteDelivery (RemoteDelivery-1).deliver(): Mail (javax.mail.internet.MimeMessage@132e13d) sent successfully to smtp://aspmx.l.google.com
18:00:06.443 [RemoteDelivery-1] INFO MailService - RemoteDelivery (RemoteDelivery-1).run(): Try to give back RemoteDelivery object into the pool.
Why try to give back RemoteDelivery object into the pool when was successfully sended?
This project hasn't been touched in 4 years so I guess I'm not holding my breath but the interface was completely changed a while back and the README is not even close to accurate as to how you use this library. I love the concept and really have use for this lib but it's quite unclear how you actually wield it from the documentation.. scanning code-as-docs as we speak.
Thanks.
I'm trying to test just basic features:
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.masukomi.aspirin.Aspirin;
import org.masukomi.aspirin.core.AspirinInternal;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.Message;
public class TestAspirin {
public static void main(String[] args) throws Exception
{
Logger rootLogger = Logger.getRootLogger();
rootLogger.setLevel(Level.TRACE);
rootLogger.addAppender(new ConsoleAppender(
new PatternLayout("%-6r [%p] %c - %m%n")));
System.out.println("starting");
MimeMessage message = AspirinInternal.createNewMimeMessage();
message.setFrom(new InternetAddress("[email protected]"));
//message.addRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
message.addRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
message.setSubject("Aspirin - test to show it doesn't shut down");
message.setText("This is the text");
Aspirin.add(message);
System.out.println("queing mail");
}
}
So, almost all is like in the unit ttest description. When I'm running it, I'm getting
014-01-19 13:51:55,531 INFO [Thread-1] Aspirin Maintenance thread started.
0 [INFO] Aspirin - Maintenance thread started.
queing mail
shutting down
2014-01-19 13:51:55,636 INFO [Aspirin-DeliveryManager-9] Aspirin DeliveryManager started.
105 [INFO] Aspirin - DeliveryManager started.
2014-01-19 13:51:55,647 TRACE [Aspirin-DeliveryManager-9] Aspirin DeliveryManager.run(): Pool state. A0/I0
116 [TRACE] Aspirin - DeliveryManager.run(): Pool state. A0/I0
2014-01-19 13:51:55,647 DEBUG [Aspirin-DeliveryManager-9] Aspirin DeliveryManager.run(): Start delivery. qi=Mail: [id=1390125115.0; recipient=[email protected]];
116 [DEBUG] Aspirin - DeliveryManager.run(): Start delivery. qi=Mail: [id=1390125115.0; recipient=[email protected]];
2014-01-19 13:51:55,651 TRACE [Aspirin-DeliveryManager-9] Aspirin GenericPoolableDeliveryThreadFactory.makeObject(): New DeliveryThread object created: DeliveryThread-1.
120 [TRACE] Aspirin - GenericPoolableDeliveryThreadFactory.makeObject(): New DeliveryThread object created: DeliveryThread-1.
2014-01-19 13:51:55,655 TRACE [Aspirin-DeliveryManager-9] Aspirin DeliveryManager.run(): Borrow DeliveryThread object. dt=DeliveryThread-1: state 'NEW/false'
124 [TRACE] Aspirin - DeliveryManager.run(): Borrow DeliveryThread object. dt=DeliveryThread-1: state 'NEW/false'
2014-01-19 13:51:55,655 TRACE [Aspirin-DeliveryManager-9] Aspirin DeliveryThread (DeliveryThread-1).setQuedItem(): Item was set. qi=DeliveryContext [qi=Mail: [id=1390125115.0; recipient=[email protected]];];
124 [TRACE] Aspirin - DeliveryThread (DeliveryThread-1).setQuedItem(): Item was set. qi=DeliveryContext [qi=Mail: [id=1390125115.0; recipient=[email protected]];];
2014-01-19 13:51:55,656 TRACE [Aspirin-DeliveryManager-9] Aspirin DeliveryManager.run(): There is no sendable item in the queue. Fallback to waiting state for a minute.
125 [TRACE] Aspirin - DeliveryManager.run(): There is no sendable item in the queue. Fallback to waiting state for a minute.
2014-01-19 13:51:55,656 TRACE [DeliveryThread-1] Aspirin DeliveryThread (DeliveryThread-1).run(): Call delivering... dCtx=DeliveryContext [qi=Mail: [id=1390125115.0; recipient=[email protected]];];
125 [TRACE] Aspirin - DeliveryThread (DeliveryThread-1).run(): Call delivering... dCtx=DeliveryContext [qi=Mail: [id=1390125115.0; recipient=[email protected]];];
2014-01-19 13:51:55,671 INFO [DeliveryThread-1] Aspirin DeliveryThread (DeliveryThread-1).deliver(): Starting mail delivery. qi=DeliveryContext [qi=Mail: [id=1390125115.0; recipient=[email protected]];];
140 [INFO] Aspirin - DeliveryThread (DeliveryThread-1).deliver(): Starting mail delivery. qi=DeliveryContext [qi=Mail: [id=1390125115.0; recipient=[email protected]];];
2014-01-19 13:51:56,155 TRACE [DeliveryThread-1] Aspirin ResolveHost.handle(): 1 servers found for 'mail.ru'.
624 [TRACE] Aspirin - ResolveHost.handle(): 1 servers found for 'mail.ru'.
2014-01-19 13:51:56,177 DEBUG [DeliveryThread-1] Aspirin SendMessage.handle(): Attempting delivery of '1390125115.0' to recipient '[email protected]' on host 'smtp://mxs.mail.ru'
646 [DEBUG] Aspirin - SendMessage.handle(): Attempting delivery of '1390125115.0' to recipient '[email protected]' on host 'smtp://mxs.mail.ru'
2014-01-19 13:51:56,306 INFO [DeliveryThread-1] Aspirin DeliveryThread (DeliveryThread-1).deliver(): Mail delivery failed: Нет маршрута до узла. qi=DeliveryContext [qi=Mail: [id=1390125115.0; recipient=[email protected]];];
775 [INFO] Aspirin - DeliveryThread (DeliveryThread-1).deliver(): Mail delivery failed: Нет маршрута до узла. qi=DeliveryContext [qi=Mail: [id=1390125115.0; recipient=[email protected]];];
2014-01-19 13:51:56,307 TRACE [DeliveryThread-1] Aspirin DeliveryManager.release(): Release item '1390125115.0' with state: 'QUEUED' after 1 attempts.
Mail delivery failed reason is localized "No route to host".
That's is rather strange since when i do "traceroute mxs.mail.ru", I see the route. So what would be the reason why the Transport can't reach the host?
It seems that Aspirin has switched to SLF4J.
Please update README about that.
AspirinInternal.java
public static final SimpleDateFormat expiryFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
class SimpleDateFormat is not thread safe.
Hello there!
I just started using Aspirin and I've pretty much fallen in love with its ease of use. However, two issues pop up each time I send a message with it.
First, it seems to send each message twice for no apparent reason. I am unsure how to find out why as I get no confirmation of the delivery of the second message.
Second, each time I run Aspirin I get the following exception printed to sysOut several times:
Exception in thread "Aspirin-QueManager-25" java.lang.NullPointerException
at org.masukomi.aspirin.core.QueManager.run(QueManager.java:198)
My implementation code is as follows:
public static void sendMail(MimeMessage message)
{
MailQue mq = new MailQue();
try
{
mq.queMail(message);
mq.addWatcher(new MailUtil());
} catch (MessagingException e)
{
e.printStackTrace();
}
mq.terminate();
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.