我正在尝试使用谷歌应用脚本来检索电子邮件附件, 下面是我的代码,用于检查电子邮件中是否有任何附件
function testMail() {
var threads = GmailApp.getInboxThreads();
for (var i = 0; i < 10; i++) {
var mess=threads[i].getMessages()[0];
if (mess.getAttachments().length>0)
{
//var filename=mess.getAttachments()[0].
Logger.log(mess.getSubject());
Logger.log(mess.getAttachments()[0].getName());
var conn = Jdbc.getConnection("jdbc:oracle:thin:@xxx.xxx.xxx.xxx/xxx.xxx.xxx", "xxx","xxxxxxx");
conn.setAutoCommit(false);
var stmt = conn.prepareStatement("insert into blob_table (filnname,blob_field) values (?,?)");
stmt.setString(1, mess.getAttachments()[0].getName());
stmt.setBlob(2, mess.getAttachments()[0]);
var res = stmt.execute();
conn.commit();
conn.close();
break;
}
}
}
但是当我运行脚本时出现错误“无法找到方法setBlob提示符”,如果我只插入字段文件名,我能够将数据保存到表blob_table中,是否有任何特殊的方法来插入blob?
由于
答案 0 :(得分:0)
如果查看自动填充或文档,您将看到JDBC与其他Apps脚本不同,它有自己的JdbcBlob概念,它与Blob不同。 (每个JdbcBlob都是Blob,但反之亦然。)您可以将常规Blob转换为这样的JDBC blob:
conn.createBlob().setBytes(0, myOriginalBlob)
在这种情况下,myOriginalBlob
是您从mess.getAttachments()[0])
答案 1 :(得分:0)
jdbcBlob和Blob是两件事。
在stmt.setBlob(2, xxxx);
xxxx是一个jdbcBlob。如果您有Blob,则需要先将其转换为jdbcBlob,然后再保存到数据库中。
var jdbcBlob = conn.createBlob();
jdbcBlob.setBytes(1, blob);
在您的示例中,正确的方法是
var jdbcBlob = conn.createBlob();
jdbcBlob.setBytes(1, mess.getAttachments()[0]);
stmt.setBlob(2, jdbcBlob);