使用Maven发送带附件的电子邮件

时间:2015-02-10 15:28:59

标签: maven

使用surefire插件和postman插件,我可以生成一个万无一失的报告并向收件人发送电子邮件。但是,万无一失的报告(html)没有附上电子邮件。收件人收到没有附件的电子邮件。如果我再次运行该项目,则电子邮件已随附件一起提供。以下是我的pom.xml。我不知道我错过了什么。请帮忙。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.testing.example</groupId>
    <artifactId>SampleExample</artifactId>
    <packaging>jar</packaging>
    <name>SampleExample</name>
    <version>1.0.0</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>   
    </dependencies>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>ch.fortysix</groupId>
                <artifactId>maven-postman-plugin</artifactId>
                <version>0.1.6</version>
                <executions>
                    <execution>
                        <id>send_an_mail</id>
                        <phase>test</phase>
                        <goals>
                            <goal>send-mail</goal>
                        </goals>
                        <inherited>false</inherited>
                        <configuration>
                            <from>xxxxxxxxxx</from>
                            <subject>this is a test auto email sent from Eclipse using Maven</subject>
                            <htmlMessage>
                            <![CDATA[
                            <p>Hi, Please find attached.</p>
                            ]]>
                            </htmlMessage>
                            <failonerror>true</failonerror>
                            <mailhost>smtp.gmail.com</mailhost>
                            <mailport>465</mailport>
                            <mailssl>true</mailssl>
                            <mailAltConfig>true</mailAltConfig>
                            <mailuser>xxxxxxx</mailuser>
                            <mailpassword>xxxxxxx</mailpassword>
                            <receivers>
                                <receiver>xxxxxxxxx</receiver>
                            </receivers>

                            <fileSets>
                                <fileSet>
                                    <directory>${basedir}/target/site</directory>
                                    <includes>
                                        <include>**/surefire-report.html</include>
                                    </includes>
                                </fileSet>
                            </fileSets>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-report-plugin</artifactId>
                <version>2.18.1</version>
                <configuration>
                    <testFailureIgnore>true</testFailureIgnore>
                </configuration>
            </plugin>
        </plugins>
    </reporting>
</project>

2 个答案:

答案 0 :(得分:1)

通常,我发现在尝试引入Eclipse之前从命令行获取Maven构建更有帮助。

您是否设置了远程存储库(例如Nexus,Artifactory)?如果没有,如果你要继续定期使用Maven,最好将它安排好。远程仓库存在后,您需要configure the project's distributionManagement元素才能将工件发布到该存储库。

现在,回到原来的问题。 surefire-report:report是报告目标,默认情况下作为报告生命周期的一部分运行。在配置它之后,它与构建生命周期无关。在您的POM中,postman插件绑定到test阶段, 是默认生命周期的一部分。

当您按documentation Maven运行命令mvn surefire-report:report时,运行构建生命周期直至并包括test阶段。 (文档中的关键短语是“在执行之前调用生命周期阶段测试的执行。”)。

因此,运行mvn surefire-report:report时的操作顺序为:

  • Maven在幕后制作'mvn test'版本
  • postman:send-mail作为测试阶段的一部分运行
  • surefire-report:report创建报告

注意最后两个步骤是如何乱序的。因此,第一次运行该命令时,还没有测试报告,因此没有附件。第二次运行它时,会有来自上一个版本的报告

你的问题变成了,你是否计划偶尔在命令行运行它,以便在有人要求时发送报告?如果是这样,那么您可以简单地从邮递员插件中删除phase配置并使用Maven命令mvn surefire-report:report postman:send-mail。这将按正确的顺序执行这些步骤。

如果您希望电子邮件每次都发生(即每次mvn clean install site),您需要将postman:send-mail目标绑定到生成报告后运行的阶段。我会尝试site阶段。如果这不起作用,请使用post-site并将Maven命令更改为mvn clean install post-site

P.S。如果您是Maven的新手,我强烈建议您了解different lifecycles and the difference between a phase and a goal。如果没有这方面的知识,你就无法真正有效地使用Maven。

答案 1 :(得分:0)

只需更改插件的顺序即可。

  1. Maven编译器插件
  2. Surefire报告插件
  3. 邮递员插件 这会有所帮助,您可以根据需要运行它。