获取电子邮件附件并将其保存到谷歌应用脚​​本中的oracle表中

时间:2012-10-07 10:32:47

标签: google-apps-script

我正在尝试使用谷歌应用脚​​本来检索电子邮件附件, 下面是我的代码,用于检查电子邮件中是否有任何附件

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?

由于

2 个答案:

答案 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);