I noticed that the current Mail component has low scalability issues.
Other components directly hardcode access to a concrete class in Mail component, not an abstract type. This will hinder us to expanding our Mail capabilities in the future.
Based on this, we should write one or several interfaces to let other components depend on these interfaces instead of the concrete classes.