2012-10-12 5 views
2

그래서 .zip 파일이 포함 된 이메일을 보내려고합니다. .zip 파일은 다른 서버의 다른 URL에 있습니다. 파일을 가져 와서 첨부하고 보낼 수 있습니다. 그러나 내가 전자 메일에서 첨부 파일을 얻을 때. * .zip.zip 이름에서 .zip을 제거하려고 시도했지만 아카이브 관리자가 열 수 없습니다..zip 파일을 레일즈의 이메일 첨부 파일로 보내기

아이디어가 있으십니까?

코드는 다음과 같습니다.

http = Net::HTTP.new('www.somedomaim.org') 
    http.start() { |http| 
    req = Net::HTTP::Get.new("/path/to/file.zip") 
    response = http.request(req) 
    tempfile = Tempfile.new('files') 
    File.open(tempfile.path, 'w') do |f| 
     f.write response.body 
    end 
    attachments["files.zip"] = File.read(tempfile.path) 
    mail to: [email protected], subject: "Sending zip file" 
    } 

는 [이 해결]

용액은 비교적 간단하다.

attachments['files.zip'] = open('http://somedomain.com/path/to/file.zip').read 

첨부 파일은 파일의 내용을 받아야합니다. .read는 파일의 내용을 반환합니다. 내 문제는 내가 새 파일의 내용에 전체 zip 파일을 배치했다는 것이 었습니다. 위의 솔루션은 zip의 내용 만 새로운 파일에 저장합니다.

언젠가 누군가에게 도움이되기를 바랍니다. 모든 제안을 주셔서 감사합니다.

+0

첨부 파일을 넣으면 어떻게됩니까? [ "files"] = File.read (tempfile.path) – Abram

+0

확장명이없는 첨부 파일로 파일을받습니다. 속성을 검사 할 때 크기는 0 바이트이고 유형은 텍스트 문서입니다. 어떤 사람들은 http 응답을 zip 아카이브가 아닌 파일에 저장하고 있다고 생각합니다. – robinjohnobrien

+0

http://rubyzip.sourceforge.net/classes/Zip/ZipFile.html – Abram

답변

1

해결책은 간단합니다.

attachments['files.zip'] = open('http://somedomain.com/path/to/file.zip').read 

첨부 파일은 파일의 내용을 받아야합니다. .read는 파일의 내용을 반환합니다. 내 문제는 내가 새 파일의 내용에 전체 zip 파일을 배치했다는 것이 었습니다. 위의 솔루션은 zip의 내용 만 새로운 파일에 저장합니다.

관련 문제