我想问一下如何在Mule(3.4.0)中添加文件作为附件?
我尝试了很多解决方案,并搜索了很多但没有找到任何好处。
这就是我现在所拥有的(在发布之前的最后一次尝试):
<sub-flow name="sendBackMail" doc:name="sendBackMail">
<set-attachment attachmentName="changed.xml" value="#[payload]" contentType="text/xml" doc:name="Attachment"/>
<logger message="Attachment ok" level="INFO" doc:name="Logger"/>
<file:file-to-byte-array-transformer doc:name="File to Byte Array"/>
<logger message="Attachment ok. Message: #[message]" level="INFO" doc:name="Logger"/>
<smtps:outbound-endpoint host="${mailSMTP}" port="${mailSendPort}"
user="${mailUser}" password="${mailPass}" to="${receiver}"
from="${mailUser}" responseTimeout="60000" doc:name="SMTP"
connector-ref="SMTP" mimeType="text/xml" subject="msp2bass" >
</smtps:outbound-endpoint>
</sub-flow>
它发送邮件但我得到xml文件的内容作为邮件正文。
我应该做什么/改变,以便邮件作为附件发送。我从另一个服务器获取文件,在其上执行XSLT然后我应该将其发送到一些邮件。
我应该提供更多信息吗?
谢谢!
我如何调用bean:
<spring:bean id="SetAttachment" name="SetAttachment" class="si.irose.msp.cust.bass.SetAttachment">
</spring:bean>
<component doc:name="Java">
<spring-object bean="SetAttachment"/>
</component>
Java类:
package si.irose.msp.cust.bass;
import org.mule.api.MuleEventContext;
import org.mule.api.MuleMessage;
import org.mule.api.lifecycle.Callable;
public class SetAttachment implements Callable{
private MuleMessage mule;
private String name;
@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
mule = eventContext.getMessage();
String tryit="routeid";
for (int i=0;i<mule.getInvocationPropertyNames().toArray().length;i++) {
if (mule.getInvocationPropertyNames().toArray()[i].equals(tryit)) {
name=mule.getInvocationProperty(mule.getInvocationPropertyNames().toArray()[i].toString()).toString();
break;
}
}
mule.addOutboundAttachment(name, mule.getInvocationProperty(name), "text/xml");
return null;
}
}
答案 0 :(得分:1)
好的问题已经解决了。
当您从文件入站读取或使用quartz(字符串或文件)生成时,您可以直接添加“附件”但是如果您执行XSLT转换然后尝试通过smtp发送该有效负载,那么您需要添加“对象”字符串“附件前的变压器。
最终工作解决方案:
<sub-flow name="sendBackMail" doc:name="sendBackMail">
<object-to-string-transformer doc:name="Object to String"/>
<set-attachment attachmentName="changed.xml" value="#[payload]" contentType="text/xml" doc:name="Attachment"/>
<logger message="Attachment ok" level="INFO" doc:name="Logger"/>
<file:file-to-byte-array-transformer doc:name="File to Byte Array"/>
<logger message="Attachment ok. Message: #[message]" level="INFO" doc:name="Logger"/>
<smtps:outbound-endpoint host="${mailSMTP}" port="${mailSendPort}"
user="${mailUser}" password="${mailPass}" to="${receiver}"
from="${mailUser}" responseTimeout="60000" doc:name="SMTP"
connector-ref="SMTP" mimeType="text/xml" subject="msp2bass" >
</smtps:outbound-endpoint>
</sub-flow>
如果你做任何其他工作而不是XSLT,我还没有检查你需要申请什么变压器,所以如果有人希望为此添加一些知识,那么请这样做并添加评论。
答案 1 :(得分:0)
您需要在set-payload
之前使用smtps:outbound-endpoint
将电子邮件的正文设置为您想要的内容,否则它将包含与set-attachment
附加的相同值。
同时删除file:file-to-byte-array-transformer
:目前还不清楚它的用途。